#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 이상
(float는 double보다 빠르게 연산하기 위한 작은 부동소수점)
double로 표현가능한 숫자의 범위(보통)
크기 = 64비트
범위 = IEEE 754 double
long double
다른 언어에서는 double의 크기가 C의 long double과 같음
표준크기
크기 = double 이상의 크기면 됨
출처 : POCU Academy COMP2200
'C언어 > C언어' 카테고리의 다른 글
[C언어]인클루드 가드의 뜻과 사용법(헤더가 꼬일 때,업계표준) (0) | 2023.02.15 |
---|---|
[C언어]#include <> 와 #include " " 차이 (0) | 2023.02.15 |
[C언어]암시적 형변환 C99표준(size_t(=unsigned int) 와 int 연산할 때 형변환포함) (0) | 2023.01.13 |
[C언어]size_t 자료형과 사용할 때 주의점(size_t VS unsigned int) (0) | 2023.01.12 |
[C언어]Clang 컴파일 시 newline-eof오류 해결법/ CMD cd 명령어 (0) | 2023.01.03 |
댓글