前言
使用#把巨集引數變為乙個字串,用##把兩個巨集引數貼合在一起.
一般用法
#include
#include
using namespace std;
#define str(s) #s
#define cons(a,b) int(a##e##b)
int main()12
3456
78910
11注意事項
當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用』#』或』##』的地方巨集引數是不會再展開.
即, 只有當前巨集生效, 引數裡的巨集!不!會!生!效 !!!!
3.1 舉例
#define a (2)
#define str(s) #s
#define cons(a,b) int(a##e##b)
printf(「int max: %s\n」, str(int_max)); // int_max #include
printf("%s\n", cons(a, a)); // compile error — int(aea)12
345兩句print會被展開為:
printf(「int max: %s\n」,「int_max」);
printf("%s\n", int(aea));12
分析:由於a和int_max均是巨集,且作為巨集cons和str的引數,並且巨集cons和str中均含有#或者##符號,所以a和int_max均不能被解引用。導致不符合預期的情況出現。
3.2 解決方案
解決這個問題的方法很簡單. 加多一層中間轉換巨集. 加這層巨集的用意是把所有巨集的引數在這層裡全部展開,
那麼在轉換巨集裡的那乙個巨集(_str)就能得到正確的巨集引數.
#define a (2)
#define _str(s) #s
#define str(s) _str(s) // 轉換巨集
#define _cons(a,b) int(a##e##b)
#define cons(a,b) _cons(a,b) // 轉換巨集12
345結果:
printf(「int max: %s\n」,str(int_max));
//輸出為: int max:0x7fffffff
//str(int_max) --> _str(0x7fffffff) 然後再轉換成字串;
C語言中 和 用法
一 基本的用法 1 引數名以 作為字首則結果將被擴充套件為由實際引數的帶引號的字串。如 12 3456 78 define dprint expr printf expr d n expr intmain 上面的例子會列印出 a b 2 2 預處理器運算子 為巨集提供了一種連線實際引數的手段。如果替...
C語言中 和 的用法
今天在看freertos 看到如下 開機初始化 log create module template,print level info 巨集定義 define log create module module,level log control block t log control block m...
C語言中 和 的用法
使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.include includeusing namespace std define str s s define cons a,b int a e b int main 當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用 或 的地方...