linux c 宏定義


#if 1
#define DEBUGP(fmt, ...) printf("%s(%d): "fmt"\n", __func__, __LINE__, ##__VA_ARGS__)
#else
#define DEBUGP(fmt, ...)
#endif

 

將宏的值轉換為字符串

#define __STR__(s)     #s
#define STR(s) __STR__(s)

 

#define SETMAC_FACTORY_START 0x7ec0000

STR(SETMAC_FACTORY_START ) // 轉換完后 "0x7ec0000"

 

 

#運算符 
出現在宏定義中的#運算符把跟在其后的參數轉換成一個字符串。有時把這種用法的#稱為字符串化運算符。例如:

#definePASTE(n)"adhfkj"#n

main()
{
printf("%s/n",PASTE(15));
}
宏定義中的#運算符告訴預處理程序,把源代碼中任何傳遞給該宏的參數轉換成一個字符串。所以輸出應該是adhfkj15。

##運算符 
##運算符用於把參數連接到一起。預處理程序把出現在##兩側的參數合並成一個符號。看下面的例子:

#defineNUM(a,b,c)a##b##c
#defineSTR(a,b,c)a##b##c

main()
{
printf("%d/n",NUM(1,2,3));
printf("%s/n",STR("aa","bb","cc"));
}

最后程序的輸出為:
123
aabbcc
千萬別擔心,除非需要或者宏的用法恰好和手頭的工作相關,否則很少有程序員會知道##運算符。絕大多數程序員從來沒用過它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM