C語言巨集定義中 和 運算子

2021-07-31 20:41:28 字數 1000 閱讀 7530

巨集定義可以包含兩個專用的運算子:#和##

#運算子將巨集的乙個引數轉換為字串字面量,所執行的操作可以理解為「字串化」。它僅允許出現在帶引數的巨集的替換列表中。舉個例子

#define print_int(n) printf(#n 

" = %d\n", n)

n之前的#運算子通知預處理器根據print_int的引數建立乙個字串字面量,因此

print_int(i/j);
會變為

printf("i/j"

" = %d\n", i/j);

以上的語句等價於:

printf("i/j = %d\n", i/j);
##運算子可以將兩個記號(如識別符號)「粘合」在一起,成為乙個記號。如果其中乙個引數是巨集引數,「粘合」會在形式引數被相應的實際引數替換後發生。考慮下面的巨集:

#define mk_id(n) i##n
當mk_id被呼叫時

int mk_id(1);
預處理後,這一宣告變為

int i1;
#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name struct_section =

則下面的定義

u_boot_cmd(helloworld, 3, 1, helloworld_cmd, "print hello world", "just a test");
預編譯後變為

cmd_tbl_t __u_boot_cmd_helloworld struct_section = 

;

java 中 和 運算子

先看一段程式的執行結果 public class test 結果 false 除0異常 1 和 都可作為邏輯與運算子,不過 還可作為位運算子。2 什麼情況下作為邏輯運算子,什麼情況下作位運算子?答案是 的兩則是boolean型別的做邏輯運算子 兩側不是boolean型別做位運算子。3 由上面的程式也...

C語言 運算子與 運算子

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

C語言 運算子和 運算子

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