Cプリコンパイル処理
6959 ワード
C言語プリコンパイル処理は3つの側面を含み、マクロ定義、および条件コンパイル、ファイルは
1.マクロ定義
解析:指定したフラグで文字列を表す
パラメータなしマクロ定義無パラメータ 一般大文字 は、統一置換(数値を直接修正し、すべての箇所を修正する) を得る.末尾にセミコロンを付けることはできません(#define PI 3.141592653;プログラム中のfloat area=PI*3*3;マクロ展開の結果:float area=3.141592653;*3*3、コンパイルエラー) は、階層的に置換することができる(マクロは、以前に定義されたマクロを使用することができる) .""号内は変換されません(printf(「PI is a float numer:」);文中のPIは引用符「」でマクロ展開を行わない) は文字置換のみであり、空間(変数に対する) は割り当てられない.
パラメータ付きマクロ定義パラメータ文字を統一置換 マクロ名とカッコにスペースを付けることはできません 統一置換エラーに注意してください.例えば、#define AREA(r)3.14*r*r/2は円の面積を得ることを意味し、AREA(a+b)マクロ展開結果:3.14*a+b*a+b/2は、予想と一致しないため、rに括弧#define AREA(r)3.14*(r)/ を付けなければなりません.
#と##
マクロ定義では、#は2つの文字列を結合していることを示し、マクロの両側に引用符を付けるように理解できます.
出力結果:
Your input is 34
#番号パラメータ付きマクロを展開すると、次の結果が得られます.
printf("Your input is ""3""4""");
##このパラメータが変数の一部であることを示す
##nameパラメータとvar_結合はcount変数に接頭辞を返すことに相当し、異なるカテゴリを区別する.
可変パラメータ...
C++マクロ定義における可変パラメータ表現は…であり、マクロ定義でこのパラメータにアクセスする方法は_VA_ARGS__
出力結果:A,B,C
特定のパラメータに個別にアクセスします(このメソッドは一時的に表示されません).
2.条件コンパイル
条件コンパイルはコンパイラに伝えます.一部のコードはコンパイルしなくても、繰り返しコンパイルを避けるためによく使用されます.
シーンはcommonを含む複数の場所である.hファイル、#ifndefコンパイラ対commonを避ける.h複数回コンパイル
3.ファイルの内容
#includeは一度に1つのファイル しか導入できません. と「common.h」の違いは<>標準ライブラリのみで検索する、common.h標準ライブラリでの検索に加えて、ユーザが指定するPATHパスでの検索コンパイル も行う.
4.マクロ定義の2人のユーザー
参考資料:
http://www.360doc.com/content/08/0324/11/59579_1140684.shtml
http://www.360doc.com/content/09/1009/16/59579_7027058.shtml
1.マクロ定義
解析:指定したフラグで文字列を表す
#define PI 3.141592653
パラメータなしマクロ定義
パラメータ付きマクロ定義
#define ADD(a, b) a+b
#と##
マクロ定義では、#は2つの文字列を結合していることを示し、マクロの両側に引用符を付けるように理解できます.
#include <stdio.h>
#define PRINT(w,h) printf("Your input is " #w #h "
");
int main(int argc, char* args[]) {
PRINT(3,4);return 0;
}
出力結果:
Your input is 34
#番号パラメータ付きマクロを展開すると、次の結果が得られます.
printf("Your input is ""3""4""");
##このパラメータが変数の一部であることを示す
#include <stdio.h>
#define PRINT(w,h) printf("Your input is" #w #h "df
");
#define VAR_PRE(name) var_##name
int main(int argc, char* args[]) {
PRINT(3,4);
int VAR_PRE(count) = 5;
printf("%d
", VAR_PRE(count));
return 0;
}
##nameパラメータとvar_結合はcount変数に接頭辞を返すことに相当し、異なるカテゴリを区別する.
可変パラメータ...
C++マクロ定義における可変パラメータ表現は…であり、マクロ定義でこのパラメータにアクセスする方法は_VA_ARGS__
#include <stdio.h>
#define PRINT_ALL(...) printf(#__VA_ARGS__ "
")
int main(int argc, char* args[]) {
PRINT_ALL(A, B, C);
return 0;
}
出力結果:A,B,C
特定のパラメータに個別にアクセスします(このメソッドは一時的に表示されません).
2.条件コンパイル
条件コンパイルはコンパイラに伝えます.一部のコードはコンパイルしなくても、繰り返しコンパイルを避けるためによく使用されます.
// common.h
#ifndef COMMON_H
#define COMMON_H
class Circle {
public:
string r;
};
#endif
シーンはcommonを含む複数の場所である.hファイル、#ifndefコンパイラ対commonを避ける.h複数回コンパイル
3.ファイルの内容
#include
4.マクロ定義の2人のユーザー
//1,
#ifndef COMDEF_H
#define COMDEF_H
//
#endif
//2, , , , 。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
参考資料:
http://www.360doc.com/content/08/0324/11/59579_1140684.shtml
http://www.360doc.com/content/09/1009/16/59579_7027058.shtml