c語言中#和##在巨集定義中的使用
阿新 • • 發佈:2020-11-21
是在巨集定義中將引數進行字串化的預處理特徵,例如:
#include <stdio.h>
#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
int a=123;
P(a);
return 0;
}
預編譯展開後的部分程式碼
#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
int a=123;
printf("%s %d\n", "a", a);
return 0;
}
是連線符,用來連線變數名例如:
#include <stdio.h>
#define V(x) var##x
int main()
{
int var1=123,var2=222,var3=321;
printf("%d\n",V(1));
printf("%d\n",V(2));
printf("%d\n",V(3));
return 0;
}
預編譯展開的部分程式碼
#define V(x) var##x int main() { int var1=123,var2=222,var3=321; printf("%d\n",var1); printf("%d\n",var2); printf("%d\n",var3); return 0; }
注意:
只能使用常量,不能使用變數的值,巨集也不會進行展開操作
以下為錯誤操作
#include <stdio.h>
#define V(x) var##x
#define P 1
int main()
{
int var1=123,var2=222,var3=321;
printf("%d\n",V(P));
return 0;
}
#include <stdio.h> #define V(x) var##x int main() { int P=1; int var1=123,var2=222,var3=321; printf("%d\n",V(P)); return 0; }
例子忘記哪裡摘抄的了,如有問題立即修改或刪除