Language/C
C언어 강좌(조건부 컴파일/매크로 함수와 #undef)
Dexter_-
2016. 9. 19. 09:43
728x90
반응형
C언어
조건부 컴파일
- 지시자는
#if
,#else
,#elif
,#endif
가 있다.
#if 조건 수식
명령문1
#else
명령문2
#endif
- 조건수식이 참일 경우 명령문1 이 컴파일되고, 거짓일 경우에는 명령문2가 컴파일된다.
- 작성중 오류를 검사하기 위한 출력코드를 프로그램에 삽입하였다가 프로그램 검사가 끝난 경우 출력문을 주우는 것을 조건부 컴파일을이용하면 다음과 같이 작성할 수 있다.
#define DEBUG 1
void main()
{
#if DEBUG == 1
printf("program start\n);
#endif
.....
}
- 위와 같은 형식은 선택적 컴파일 또는 조건부 컴파일이라 한다.
- 조건부 컴파일로 또 다른 지시자는 #ifdef, #ifndef, #endif로 매크로의 존재여부에 따라서 조건주 컴파일을 실행한다.
- 매크로가 정의 되어 있을때 컴파일을 수행하고 #ifndef 는 매크로가 정의되어 있지 않을 경우 컴파일을 수행한다.
🔔 예) 값을 수시로 바꾸어야 할 때
🎯 프로그램 설명
- DEBUG 를 #define 하지 않은 상태에서 컴파일시에 컴파일 명령어로 #define 하여 값을 변경할 수 있다.
🔔 예)
gcc -DDEBUG -o main main.c
실행 결과
🔔 예) make 파일 내부의 -D로 #define 되어 있는 값을 아래와 같이 리다이렉션으로 찾아낼 수 있다.
[aaa. txt 파일 내부]
- -DF_CPU = 16000000UL 의 값을 찾기위해 make 파일을 열어 검색한다.
매크로 함수와 #undef
- #define 지시자는 상수뿐만 아니라 함수도 정의할 수 있다.
#define 매크로 이름(인수) (문자열)
🔔 예) 매크로 함수의 사용 예
🎯 프로그램 설명
- gcc --save-temps -main.c 로 main.i 파일을 생성하여main.i 파일 내부의 위 함수의 매크로 부분이 치환된 것을 볼 수 있다.
- type검사를 하지 않기 때문에 잘 사용되지 않는다.
[main.i 파일 내부]
실행 결과
- #undef 지시자는 정의된 매크로를 해제하는 지시자이다.
- 동일한 매크로를 여러 번 정의하였을 경우, #undef을 이용하면 가장 최근에 정의한 것이 취소되고 그 바로 전의 정의가 효력을 갖는다.
#undef 매크로이름
- 아래와 같이 사용한다.
#define PI 3.1416
#define PI 3.14
area1 = 5 * 5 * PI;
#undef PI
area2 = 5 * 5 * PI;
- 이 경우 area1은 PI 값이 3.14로 계산되고, area2의 경우 PI값이 3.1416으로 계산된다.
728x90
반응형