C語言中 和 的功能

2022-05-07 02:21:06 字數 903 閱讀 5074

參考:

在c語言的巨集中,#的功能是將其後面的巨集引數進行字串化操作(stringfication),簡單說就是在對它所引用的巨集 變數通過替換後在其左右各加上乙個雙引號。比如下面**中的巨集:

#define warn_if(exp) \

do \

while(0)

那麼實際使用中會出現下面所示的替換過程:

warn_if (divider == 0);

被替換為

do  while(0);

這樣每次divider(除數)為0的時候便會在標準錯誤流上輸出乙個提示資訊。

## 被稱為連線符(concatenator),用來將兩個token連線為乙個token。注意這裡連線的物件是token就行,而不一定是巨集的變數。

比如你要做乙個選單項命令名和函式指標組成的結構體的陣列,並且希望在函式名和選單項命令名之間有直觀的、名字上的關係。那麼下面的**就非常實用:

#include typedef struct command

t_commands, *pt_commands;

#define command(name)

void (f1_command)(void)

void (f2_command)(void)

int main()

; cmds[0].function();

cmds[1].function();

return 0;

}

替換後的**為:

t_commands cmds =,	,

};

command巨集在這裡充當乙個**生成器的作用,這樣可以在一定程度上減少**密度,間接地也可以減少不留心所造成的錯誤。

C語言中 和

在c語言中,每個變數都是乙個記憶體位置,並且每個記憶體位置都定義了其位址,可以使用 運算子 進行訪問,該位址表示記憶體中的位址。a指標是乙個變數,其值是另乙個變數的位址,即儲存位置的直接位址。像任何變數或常量一樣,你必須在使用指標儲存任何變數位址之前宣告乙個指標。int ip pointer to ...

C語言中 和 用法

一 基本的用法 1 引數名以 作為字首則結果將被擴充套件為由實際引數的帶引號的字串。如 12 3456 78 define dprint expr printf expr d n expr intmain 上面的例子會列印出 a b 2 2 預處理器運算子 為巨集提供了一種連線實際引數的手段。如果替...

c語言中「 」和「 」區別

乙個豎槓 表示運算的或 二個豎槓 表示邏輯的或 c語言的位運算 取反,0取反是1,1取反是0 是左移,比如1 右移,類似左移,數值大小除以2的n次方 按位與,1與任意數等於任意數本身,0與任意數等於0,即1 x x,0 x 0 按位或,x y中只要有乙個1則結果為1 按位異或,x y相等則為0,不等...