プリコンパイルコマンドの#define、#if、#ifdef、#ifndef、#undef

16518 ワード

文書ディレクトリ
  • 一、#defineマクロ
  • 1.定数値
  • を定義
  • 二,#udefマクロ
  • 三、#if条件
  • 1.#if#endif
  • 2.#if#else #endif
  • 四、#ifdefマクロ
  • 1.#ifdef#endif
  • 2.#ifef#else #endif
  • 五、#ifndefマクロ
  • 1.#ifndef#endif
  • 2.#ifndef#else #endif
  • 六、重複防止コンパイル作用
  • #で始まるのはすべてプリコンパイル命令で、正式にコンパイルする前に、コンパイラはいくつかのプリプロセッシングの仕事をします.
    一、#defineマクロ
    1.定数値の定義
    #define M 10
    

    次のようになります.
    #include
    #define M 10
    int main()
    {
    	printf("%d
    "
    ,M); //10 return 0; }

    二、#udefマクロ
    以前定義したマクロ定義をキャンセルします.以前定義されていない場合は無視します.
    /*     */
    #include
    #define M 10
    #undef M
    int main()
    {
    	printf("%d
    "
    ,M); //error, M return 0; }
    /*  */
    #include
    #undef M
    int main()
    {
    	printf("neglect
    "
    ); // neglect return 0; }

    三、#if条件
    1.#if#endif
    #if     
       1			//        ,        1 
    #endif
       2			//     1    ,      2
    
    /*     2*/
    #include
    
    #define K 10
    
    #if K==0
    #define M 0
    
    #endif
    #define N 100
    
    int main()
    {
    	printf("N:%d
    "
    ,N); // N:100 //!printf("M:%d
    ",M);
    //M return 0; }
    /*     1 2*/
    #include
    
    #define K 0
    
    #if K==0
    #define M 0
    
    #endif
    #define N 100
    
    int main()
    {
    	printf("M:%d,N:%d
    "
    ,M,N); //M:0,N:100 return 0; }

    2.#if#else #endif
    #if     
       1			//        ,        1
    #else
       2			//         ,        2
    #endif
       3			//     1 2    ,          
    
    /*     1 3*/
    #include
    
    #define K 0
    
    #if K==0
    #define M 0
    
    #else
    #define M 10
    
    #endif
    #define N 100
    
    int main()
    {
    	printf("M:%d,N:%d
    "
    ,M,N); //M:0,N:100 return 0; }
    /*     2 3*/
    #include
    
    #define K 10
    
    #if K==0
    #define M 0
    
    #else
    #define M 10
    
    #endif
    #define N 100
    
    int main()
    {
    	printf("M:%d,N:%d
    "
    ,M,N); //M:10,N:100 return 0; }

    四、#ifdefマクロ
    1.#ifdef#endif
    #ifdef x		//  x     ,        1 
       1			
    #endif			//  x      ,      2
       2
    

    同【三、】
    /*     1 3*/
    #include
    
    #ifdef K
    #define M 10
    
    #endif
    #define N 100
    
    int main()
    {
    	printf("N:%d
    "
    ,N); // N:100 //!printf("M:%d
    ",M);
    //M return 0; }
    /*     1 2*/
    #include
    
    #define K 10
    
    #ifdef K
    #define M 10
    
    #endif 
    #define N 100
    
    int main()
    {
    	printf("M:%d,N:%d
    "
    ,M,N); //M:10,N:100 return 0; }

    2.#ifef#else #endif
    #ifdef x		//  x     ,        1 
       1			
    #else			//  x      ,        2
       2
    #endif			//  x      ,      3
       3
    

    同【三、】
    五、#ifndefマクロ
    1.#ifndef#endif
    #ifndef x		//  x      ,        1 
       1			
    #endif			//  x      ,      2
       2
    

    2.#ifndef#else #endif
    #ifndef x		//  x      ,        1 
       1			
    #else			//  x     ,        2
       2
    #endif			//  x      ,      3
       3
    

    六、重複コンパイル防止作用int a;は同じ区間で2回繰り返し定義できないことは明らかです.同様に、ヘッダファイルが2回繰り返しコンパイルされることを防止するために、プリコンパイルコマンドを使用してこのことを完了します.
    #ifndef        XXX
    #define        XXX
       
    #endif
    

    これにより、1回目のコンパイル時に XXXが存在しないことが確認され、1回目のコンパイルが開始される.2回目の繰り返しコンパイルの場合、コードセグメントを繰り返しない XXXが既に存在することを確認した.
    Reference:#define#undef#ifdef#ifndef#if用法プリコンパイルコマンドのif、#if、#ifdef、#ifnde、#undefの違い