전처리기(preprocessor)는 프로그램을 컴파일할 때 컴파일 직전에 실행되는 것으로, 전처리기가 실행되면 각 코드 파일에서 #으로 시작하는 지시자(directives)를 찾는다.
#include
지정된 파일을 그 위치에 복사, 파일을 포함시키기 위해 사용한다. Current directory 에서 먼저 찾고 그 다음 표준 라이브러리에서 찾음
// 표준 라이브러리
#include <filename>
// 사용자가 정의한 파일
#include "filename"
#define
심볼릭 상수나 매크로를 생성할 때 사용. 컴파일 시 텍스트로 대체됨. 매크로 사용의 장점은 코딩 오버헤드를 줄여줌.
#define PI 3.141592
#define CIRCLE_AREA( x ) ( (PI) * ( x ) * ( x ) )
#define RECTANGLE_AREA( x, y ) ( ( x ) * ( y ) )
rectArea = RECTANGLE_AREA( a + 4, b + 7 );
#undef
심볼릭 상수나 매크로를 생성한 것을 해제할 때 사용
조건부 컴파일
#if !defined( NULL )
#define NULL 0
#endif
모든 #if 는 #endif로 끝남
#ifdef 는 #if defined 의 줄임 표현
#ifndef 는 #if !defined 의 줄임 표현
#elif 와 #else 사용 예시
#if defined(STM32F4XX)
// do something …
#elif defined(ESP32)
// do something …
#else
// do something …
#endif
컴파일 할 때 제외하고 싶은 코드가 있을 때 아래와 같이 사용
#if 0
code commented out
#endif
디버깅 할 때 사용 예시
#define DEBUG 1
#if (DEBUG==1)
printf (“ Variable x = %d \n”, x) ;
#endif
#define DEBUG
#if defined(DEBUG)
printf (“ Variable x = %d \n”, x) ;
#endif
assert 매크로
#include <assert.h> // assert가 정의된 헤더 파일 포함
assert(src != NULL); // src가 NULL이면 프로그램 중단
assert(num > 0); // num이 양의 정수가 아니면 프로그램 중단
만약 NDEBUG 가 #define 되어 있다면 모든 assert 매크로가 무시된다.
#define NDEBUG
'프로그래밍 > C' 카테고리의 다른 글
C, Linux ] pthread 사용해 보기 (0) | 2022.08.25 |
---|---|
C ] 명령 프롬프트 구현 (함수포인터 사용) (0) | 2022.08.25 |
C, Linux ] ls 명령어 구현 (0) | 2022.08.17 |
C, Linux ] main 함수의 매개변수 사용해서 파일 입출력 하기 (0) | 2022.08.17 |
C ] 가변인자 함수 만들기, 가변인자 출력함수 만들기 (0) | 2022.08.12 |