C語言的 運算子

2021-10-07 13:32:43 字數 1171 閱讀 9201

在類函式巨集中(帶引數的巨集),#號作為乙個預處理運算子,可以把記號轉換成字串。

下面是乙個類函式巨集:

#define psqr(x) printf("the square of x is %d. \n",((x)*(x))
假設這樣使用巨集:

psqr(8

);

輸出為

the square of x is 64.
注意雙引號字串中x被視為普通文字,而不是乙個可被替換的記號。

c語言允許在字串中包含巨集引數。在類函式巨集中(帶引數的巨集),#號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果x是乙個巨集形參,那麼#x就是轉換為字串「x」的形參名。這個過程稱為字串化。

示例:

/* subst.c -- substitute in string */

#include

#define psqr(x) printf("the square of " #x " is %d.\n",((x)*(x)))

intmain

(void

)

該程式的輸出如下:

the square of y is 25.

the square of 2 + 4 is 36.

呼叫第乙個巨集時,用「y」替換#x,呼叫第二個巨集時,用"2 + 4"替換#x。ansi c字串的串聯特性將這些字串與printf()語句的其他字串組合,生成最終的字串。例如,第一次呼叫變成:

printf

("the square of "

"y"" is %d.\n",(

(y)*

(y))

);

然後,字串串聯功能將這三個字串組合成乙個字串:

"the square of y is %d.\n"
注意,#的這種作用只有在類函式巨集的替換體中才能發揮這種作用。

C語言 運算子與 運算子

我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...

C語言 運算子和 運算子

變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...

C語言運算子

1級優先順序左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 字尾增量運算子 字尾增量運算子 2級優先順序右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3級優先順序左結合 ...