關於巨集定義中 與 的用法

2021-06-05 18:12:19 字數 1030 閱讀 5148

巨集在條件編譯以及各種大規模的定義裡是非常有用的。

前面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 實際上通過巨集定義...