본문 바로가기
C언어/C언어

[C언어]#include 의미 / 자료형 정리

by Oliver_Candy 2023. 1. 9.

 #include 의미

1. 다른 파일에 구현된 함수나 변수를 사용할 수 있게 해준다.

2. #include 는 전처리기 지시문 중 하나

3. #include 는 컴파일 전에 텍스트를 복붙해주는 역할을 함

 

 

 

 

 

 

#include 가 작동되는 과정을 stdio.h 헤더파일이 hello.c로 include되는 과정을 예시로 설명하겠다.

#include <stdio.h>

int main(void)
{
    /* 코드 생략 */
}

<코드1> hello.c 

/* 코드생략1 */
/* 코드생략2 */

<코드2> stdio.h

/* #include <stdio.h> 내용 교체 */

/* 코드생략1 */
/* 코드생략2 */

int main(void)
{
    /* 코드생략 */
}

<코드3> hello.c

과정 ① 전처리기가 컴파일 전에 include를 발견 -> stdio.h 파일을 엶 -> stdio.h 내용 복사

과정 ② #include <stdio.h>를 지우고 텍스트 내용 복붙 <코드3>

과정 ③ hello.c 파일 복붙된 코드로 컴파일

 

 

 

 자료형

 

정수형 자료형:char,short,int,long

실수형 자료형:float,double,long double

 

 char

최소 8비트인 정수형 표준은 8비트 이상으로 정의

C언어 표준에서는 1Byte의 크기를 char의 비트수로 결정 -> char가 무조건 8bit가 아님! 하지만 char는 무조건 1byte!!

char가 몇 비트인지 확인 하는법

#include <limit.h> 하고 CHAR_BIT로 확인가능

 

#include <limit.h>

int main(void){
    char char_size = CHAR_BIT;
    return 0;
}

char에서 unsinged/singed를 생략하면 컴파일러 마다다름 

why? char는 원래 ASCII를 사용하기 위해서 만든 자료형(7bit)이므로 8비트까지 쓸 일이 없기에 최상위 비트를 정의하지 않음

 

char로 표현가능한 숫자의 범위(표준,포팅문제 없는 범위)

unsigned char = 0 ~ 255

char = 0 ~ 127 (ASCII를 쓰기 위한 범위)

signed char = -127 ~ 127 (옛날 기계는 1의 보수를 사용할 수도 있기 때문에 '안전한'포팅 범위는 -127까지)

 

char로 표현가능한 숫자의 범위(보통)

크기 = 8비트

부호생략시 : signed

범위

unsigned char = 0 ~ 255

signed char = -128 ~ 128

 

 

 short

최소 16비트 and char 크기 이상인 정수형으로 정의

 

short로 표현가능한 숫자의 범위(표준,포팅문제 없는 범위)

unsigned short = 0 ~ 65535

signed short = -32767 ~ 32767

 

int보다 짧음 -> 메모리 적게 쓰기 위해

메모리가 적다고해서 성능이 좋아지는 건 아님 -> CPU는 int 기본크기여서 작은 크기 계산하려면 복잡함

 

short로 표현가능한 숫자의 범위(보통)

크기 = 16비트

범위

unsigned short = 0 ~ 65535

signed short = -32768 ~ 32767

 

 

 int

최소 16비트 and short 크기 이상인 정수형으로 정의

-> why 16비트? CPU가 잘 아는 크기여야함

-> ALU(산술논리장치)가 사용하는 기본데이터 = 워드(word)

-> 예전에는 16비트 CPU가 흔했기에 16비트로 정의!!

 

나중에는 32비트 컴퓨터가 많이 나오면서 int크기가 32비트인 컴파일러가 많이 생김

 

int로 표현가능한 숫자의 범위(표준,포팅문제 없는 범위)(short와 동일)

unsigned int = 0 ~ 65535

signed int = -32767 ~ 32767

 

int로 표현가능한 숫자의 범위(보통)

크기 = 32비트

범위

unsigned int = 0 ~ 4,294,967,295

signed int = -2,147,483,648 ~ 2,147,483,647

 

(+ int 리터럴)

정수로 표현하는 상수들은 기본적으로 int로 인식하고 있다. 그러므로 int범위 이상의 상수를 사용하기 위해서는 리터럴 이라는 표기법을 작성해야함

unsigned int unsigned_int1 = 2147483648;  /* (경고 발생) */
unsigned int unsigned_int2 = 2147483648u; /* (경고 X) */

 

 

 

 

 long

다른 언어에서는 long의 크기가 64비트임

최소 32비트 and int 크기 이상인 정수형으로 정의

-> int가 16비트 일 때, 2배 더 큰 자료형이 필요해서

 

long로 표현가능한 숫자의 범위(표준,포팅문제 없는 범위)

unsigned long = 0 ~ 4,294,967,295

signed long = -2,147,483,647 ~ 2,147,483,647

 

(+long 리터럴)

$l$ or $L$ : long을 나타내는 접미사

$u$ or $U$ : unsigned을 나타내는 접미사

 

(+ 최소 64비트 나타내는 정수형 자료형은 C89에는 없음)

 

 float

대부분의 부동소수점 자료형은 IEEE 754로 대동단결

    float 는 IEEE 754 single

double 는 IEEE 754 double

 

C는 IEEE 754를 지원하기 전부터 사용됨

 

float표준 IEEE 754 아니어도됨 구현하기 마음

크기 : char 이상 (8비트 이상)

unsigned 없음

 

float로 표현가능한 숫자의 범위(보통)

크기 = 32비트

범위 = IEEE 754 single

 

(+ float 리터럴) -> 실수형 상수는 기본적으로 double을 기본으로 인식함

$f$ : float를 나타내는 접미사

 

 

 

 

 double

CPU가 이해하는 기본크기

double표준 크기

크기 = float 이상

(floatdouble보다 빠르게 연산하기 위한 작은 부동소수점)

 

double로 표현가능한 숫자의 범위(보통)

크기 = 64비트

범위 = IEEE 754 double

 

 long double

다른 언어에서는 double의 크기가 C의 long double과 같음

 

표준크기

크기 = double 이상의 크기면 됨 

 

 

 

출처 : POCU Academy COMP2200

댓글