c語言的 和 的用法

2022-02-04 09:01:18 字數 969 閱讀 5469

#include #define add(a,b) printf(#a " + " #b " = %d\n",((a)+(b)))

#define xname(n) x ## n

#define print_xn(n) printf("x" #n " = %d\n", x ## n)

int main(void)

再次學習一下後兩個還定義的小技巧,在vscode中可以把滑鼠放到**中,可以看到巨集定義展開的最終結果。這個編輯器,值得推薦,我主打用他來寫**的。

1、如果a是乙個巨集形參,那麼#a就是轉換為字串"a"的形參名。這個過程稱為字串化(stringizing)

2、與#運算子類似,##運算子可用於類函式巨集(帶參巨集)的替換部分。##運算子可以把兩個記號組合成乙個記號。

執行結果:

##運算子在這裡看來並沒有起到多大的便利,反而會讓我們感覺到不習慣。但是,使用##運算子有時候是可以提高封裝性及程式的可讀性的。如跑實時作業系統的stm32程式中,關於gpio的硬體驅動中有如下**:

#define __stm32_pin(index, gpio, gpio_index) \

假設這樣使用該巨集:

__stm32_pin(7, c, 13)
該巨集將展開為:

然後這就可以很方便的將要使用的硬體引腳這麼一一列出來,然後再拿去進行配置

C語言巨集中的 和 的用法

與 在巨集定義中的 巨集展開 include define f a,b a b define g a a define h a g a int main 巨集展開時 如果巨集定義以 開頭,不展開引數,直接替換。故g f 1,2 f 1,2 f 1,2 如果巨集定義不以 開頭,展開引數,直接替換,由外...

C語言break和continue的用法和區別

break 只能用於跳出迴圈體和跳出switch。break 語句不能用於迴圈語句和 switch 語句之外的任何其他語句中。continue不能用於switch語句中,除非switch在迴圈體中。此時 continue 表示的也是結束迴圈體的本次迴圈,跟 switch 也沒有關係。不管是 for ...

C語言 sprintf和strcat的用法

sprintf 是個變參函式,定義如下 int sprintf char buffer,const char format argument sprintf函式的功能是它把結果輸出到指定的字串中.sprintf的第乙個引數是目的字串,因為c語言在進行字串操作時不檢查字串的空間是否夠大,所以可能會出現...