C. 조건 컴 파일 을 깊이 이해 합 니 다 (\ # define, \ # if, \ # ifdef, \ # elif, \ # endif)

1. 예비 처리 조건 컴 파일
예비 처 리 는 주로 세 가지 측면의 내용 이 있다. 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 의 역할]

좋은 웹페이지 즐겨찾기