マクロ定義の特殊記号

937 ワード

特殊な記号には、#(文字列化)、##(パラメータ接続)、#@(パラメータ文字化)、および(次の行に接続)が含まれます.
1.#(マクロパラメータを自動的に文字列化する文字列化操作)
#define ToString(x) #x
char* str = ToString(123132);//str = "123132"
2.##(パラメータ接続操作、すなわちマクロパラメータが他の記号を接続することを許可し、新しいパラメータを構成する、##の左右の記号は意味のある記号を構成することができる必要がある)
#define Conn(x, y) x##y
int n = Conn(123, 456);//n =123456 char* str = Conn("asdf", "adf");//str = "asdfadf"
3.#@(パラメータ文字化操作、マクロパラメータを文字化し、パラメータの最後の文字を取り、パラメータが4文字を超えてエラーを報告する)
#define ToChar(x) #@x
char a = ToChar(1);//a = '1' char a = ToChar(123);//a = '3'
4.(行は操作を継続し、定義されたマクロが1行で完全に表現できない場合、\で次の行がこのマクロの定義を継続することを表すことができ、最後の行はを追加しないでください)
5.__VA_ARGS__(不定数のパラメータを受け入れるために使用される):
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
eprintf ("%s:%d: ", input_file, line_no)// fprintf (stderr, "%s:%d: ", input_file, line_no)