전처리기를 배워보자.
개발자가 프로그램을 작성하고 컴퓨터가 이를 실행하는 과정에서 소스작성 - > 컴파일 - > 링크 의 과정을 거치게
된다. 이 과정중 소스작성을 하고 컴파일하기 전에 작업을 처리하는게 전처리기입니다.
#으로 시작하며 include , define, , if ,ifdef, endif, elif 등이 있다.
#include <stdio.h> // #include 하면 해당 파일을 가져와서 이 파일에 포함한다.
void main()
{
}
include는 #include <파일명>으로 작성하게 되면 해당 파일을 현재 파일에 포함한다.
#include <stdio.h>
int main()
{
if (0)
{
printf("실행되지는 않지만 컴파일은 됨\n");
}
#if 0
printf("컴파일 자체가 안됨\n");
#endif
return 0;
}
#if 전처리기는 #if부터 #endif 까지 컴파일 되지 않는 소스코드의 영역을 지정한다.
#include <stdio.h>
#define NUM - 3
int main(void)
{
#if NUM
printf("if : NUM is %d\n", NUM);
#else
printf("else : NUM is %d\n", NUM);
#endif
}
#if 는 0인 경우에만 실행된다. NUM이 -3 음수값인데도 if문의 흐름을 탔다.
#include <stdio.h>
#define A 0
int main(void)
{
#ifdef A
printf("A is defined\n");
#endif
#if A
print("A is True\n");
#else
printf("A is False\n");
#endif
return 0;
}
#ifdef A는 A가 #define으로 정의되었는지 확인하고 정의되어있다면 소스코드를 컴파일하게된다.
#if A는 A의 값이 0이라면 #if부분을 컴파일하고 A의 값이 1이라면 #else부분을 컴파일한다.
#include <stdio.h>
#define NUM 2
int main(void)
{
#if NUM == 1
printf("NUM is 1\n");
#elif NUM == 2
printf("NUM is 2\n");
#elif NUM == 3
printf("NUM is 3\n");
#elif NUM == 4
printf("NUM is 4\n");
#endif
return 0;
}
#elif 를 사용하면 여러 분기로 나눠서 조건을 검사할 수 있다.
#elifdef는 define으로 정의되었는지 안되었는지만 판단하기 떄문에 #elif의 사용이 불가능하다.
하지만 #if는 사용가능하다.
#include <stdio.h>
#define 원의둘레(r) (r*PI);
int main(void)
{
int a = 2, b = 3, PI = 3.14;
int result = 원의둘레(a + b);
printf("%d,%d의 원의 둘레는 %d", a, b, result);
}
#define을 이용해서 원의둘레를 구하는데 a+b*3.14가 되어서 *우선순위가 높기 때문에 예상치 못한 결과가 나온다.
#include <stdio.h>
#define 원의둘레(r) ((r)*PI);
int main(void)
{
int a = 2, b = 3, PI = 3.14;
int result = 원의둘레(a + b);
printf("%d,%d의 원의 둘레는 %d", a, b, result);
}
#define 원의둘레(r) ((r)*PI); 괄호로 우선순위를 정해주면 정확한 결과가 나온다.
'PROGRAMMING LANGUAGE > C' 카테고리의 다른 글
12강 재귀함수 (0) | 2021.09.15 |
---|---|
11강 변수의 존재기간과 접근범위 (0) | 2021.09.15 |
9강 for (0) | 2021.09.14 |
8강 dowhile (0) | 2021.09.14 |
7강 반복문(while) break, continue (0) | 2021.09.14 |