C. 조건 컴 파일 을 깊이 이해 합 니 다 (\ # define, \ # if, \ # ifdef, \ # elif, \ # endif)
예비 처 리 는 주로 세 가지 측면의 내용 이 있다. 1. 매크로 정의;2. 파일 포함;3. 조건 부 컴 파일.예비 처리 명령 은 기호 '\ #' 로 시작 합 니 다.
2. 상용 명령
# ,
#define
#undef
#if ,
#ifdef ,
#ifndef ,
#elif #if , ,
#elif #else #if
#endif #if……#else
#error
세 가지 상황
1:
#ifdef XXXX
... 1...
#else
... 2...
#endif
XXXX #define , 1 ; 2 。
2:
#ifndef XXXX
... 1...
#else
... 2...
#endif
#ifndef, if not def。
#ifdef 。( XXXX, 1, 2)。
3:
#if
... 1...
#else
... 2...
#endif
, ( 0 ), 1, 2。
4. 사례 분석
두 개의 파일 이 있 습 니 다. 하 나 는 debug. h 이 고 다른 하 나 는 테스트 에 사용 되 는 main. c 입 니 다.
//debug.h
#ifndef DEBUG_H
#define DEBUG_H
#define DEBUG
#ifdef DEBUG
#define debug(fmt,...)\
{\
printf("file:%s func:%s line:%d ",__FILE__,__func__,__LINE__);\
printf("----define---");\
printf(fmt,##__VA_ARGS__);\
}
// else1
#else
#define debug(fmt,...)\
{\
printf("file:%s func:%s line:%d ",__FILE__,__func__,__LINE__);\
printf("----else---");\
printf(fmt,##__VA_ARGS__);\
}
// else2
/*#else
#define debug(fmt,...) if(0)
*/
#endif//DEBUG
//
#define error(fmt,...)\
{\
printf("file:%s func:%s line:%d ",__FILE__,__func__,__LINE__);\
printf(fmt,##__VA_ARGS__);\
}
#endif//DEBUG_H
//main.c
#include
#include"debug.h"
int main()
{
debug("1/...
");
debug("2/。。。。
");
//...
printf("-----------
");
error("...error...
");
}
출력 결과:
file:main.c func:main line:8 ----define---1/...
file:main.c func:main line:11 ----define---2/。。。。
-----------
file:main.c func:main line:15 ...error...
한 파 를 설명 하 겠 습 니 다.
당 \ # define DEBUG 실행 #ifdef 부분 문
당 \ # define DEBUG 문장 이 주석 되 어 효력 이 발생 하지 않 을 때 실행 합 니 다. #else 부분 문
# ifdef... \ # else... \ # endif 구조 이외 의 것 은 언제든지 집행 할 수 있다.
다섯, 설명해 주세요 printf(fmt,##__VA_ARGS__);
debug (fmt,...) 는 printf ("fmt", \ # # VA ARGS) 와 같 습 니 다.
debug("%s", “abc”);<==>printf("%s ",“abc”);
fmt 는 형식 부 호 를 표시 합 니 다. 매개 변수 목록 입 니 다.
장점 은 몇 개의 매개 변수 값 을 출력 하 든 위 와 같은 통 일 된 형식 으로 출력 을 실현 할 수 있다 는 것 이다!
debug("1/...
");
debug("%s %d
","test",10);
file:main.c func:main line:8 ----define---1/...
file:main.c func:main line:9 ----define---test 10
[\ #, \ #, VA ARGS 와 \ # # VA ARGS 의 역할]