プリコンパイルコマンドの#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.定数値の定義
次のようになります.
二、#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
六、重複コンパイル防止作用
これにより、1回目のコンパイル時に
Reference:#define#undef#ifdef#ifndef#if用法プリコンパイルコマンドのif、#if、#ifdef、#ifnde、#undefの違い
一、#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の違い