巨集在條件編譯以及各種大規模的定義裡是非常有用的。
前面qt原始碼學習筆記裡就有一篇用來介紹巨集的定義。
這次主要介紹下巨集定義裡#,##的作用。
關於巨集,注意可以用gcc –e test.cpp來檢視預編譯之後的結果。
1.先介紹#
主要是字串替換的作用。將傳入的符號轉化為字串
直接上源**:
#define執行結果:marco(x)\
""#x""
#include
#include
using namespace std;
int
main()
test
abchelloworld43
102.再來看下##
關於這個,前面已經介紹過了。看個簡單的例子:
#define看下預編譯的結果:produce(marco)\
marco(aaa)\
marco(bbb)\
marco(ccc)
#define
image(x)\
image_##x,
#define
pic(x)\
pic_##x,
enum imagetype ;
enum pictype ;
#define
function_declaration(x)\
void
get##x();
produce(function_declaration)
c:>gcc -e test.cpp
# 1 "test.cpp"
# 1 ""
# 1 ""
# 1 "test.cpp"
# 12 "test.cpp"
enum imagetype ;
enum pictype ;
void getaaa(); void getbbb(); void getccc();
巨集定義中 與 的用法
巨集定義中 的功能是將其後面的巨集引數進行字串化操作 stringfication 舉個例子就明白了 define warn if exp do while 0 使用warn if divider 0 被替換為 do while 0 ok,講 了,連線符 concatenator 用來將兩個toke...
關於 在巨集定義中的用法
在c c 的巨集定義中,存在特殊的作用1.運算子將乙個巨集的引數轉換為字串字面量。它僅允許出現在帶引數的巨集的替換列表中。view plain copy to clipboard print?include define print str s printf s s n s int main 輸出 ...
關於巨集定義的用法
如何解釋下面這段 define led1 a if a gpio setbits gpioc,gpio pin 3 else gpio resetbits gpioc,gpio pin 3 首先,這個是用巨集定義的方式包裝成類似函式那樣,但不是函式呼叫 你在 中呼叫 led1 1 實際上通過巨集定義...