C語言巨集定義中的 與

2021-06-18 23:12:09 字數 967 閱讀 3758

1、 #,為後面的巨集形參新增雙引號。

例: #define singlesharp(arg) #arg //注意:#和arg之間可以有空格,效果一樣

singlesharp(singlesharp); <==> "singlesharp";

2、#@,為後面的巨集形參新增單引號。

例: #define singlesharpwithat(arg) #@arg //注意:#和@是乙個整體,之間不能有空格,#@和arg之間可以有空格

singlesharpwithat($); <==> '$';

3、##,一種分隔連線方式,它的作用是先分隔,然後進行強制連線。

1)分隔的作用類似於空格。在普通的巨集定義中,預處理器一般把空格解釋成分段標誌,對於每一段和前面比較,相同的就被替換,但是這樣 做的結果是,被替換段之間存在一些空格。如果不希望出現這些空格,就可以通過新增##來替代空格。另外一些分隔標誌包括操作符,比 如+、-、*、/、[、] ...

2)強制連線,就是去掉空格,把兩者連線起來。

3)連線##前後兩個巨集形參的具體過程如下(為方便理解,主觀認為如此,實際過程並非如此): 首先用空格代替##,把巨集分成幾段,每段和巨集形參比較,如果是巨集形參,就用相應的實參替換,然後去掉所有空格,連線這些段。

例:#define foo(arg) my##arg

foo(abc); <==> myabc;

例:#define a1(name,type) type name_##type##_type

a1(a1,int); <==> int name_int_type;

例: #define a2(name,type) type name##_##type##_type

a2(a1,int); <==> int a1_int_type;

注意:##前後可以有若干個空格,效果一樣!

c語言的巨集定義

include define square x x x define pr x printf the result is d.n x int main void 執行結果如下 the result is 16.the result is 4.the result is 14.the result i...

C語言巨集定義

c語言有很多預處理命令,如包含命令 include,巨集定義命令 define。預處理命令在程式編譯之前被編譯器處理,而巨集定義也在此時被替換。或c 語言源程式中允許用乙個識別符號來表示乙個字串,稱為 巨集 被定義為 巨集 的識別符號稱為 巨集名 在編譯預處理時,對程式中所有出現的 巨集名 都用巨集...

C語言巨集定義

乙個巨集定義的作用域是從定義處到 undef處或檔案結尾。undef num 現在此處num沒有定義。1.ifdef num 如果num有巨集定義就編譯此處。else 如果num沒有巨集定義就編譯此處 endif 不論num 有沒有巨集都編譯,即判斷體已結束。ifndef num 如果num沒有巨集...