巨集在c 中的使用方式

2021-05-22 20:35:55 字數 574 閱讀 7958

最近面試別人,總是喜歡問的乙個問題,巨集在c++中有多少種用法。用來考查對方的知識面以及對c++工程的熟悉程度。

有時候想想,自己的了解也許也並不全面,所以趁機會好好總結總結。

總結起來就兩點:條件編譯、定義常量和函式。

1。 防止標頭檔案被重複包含。這是巨集在條件編譯中發揮的作用。

2。 定義常量。這已經被const 型別的變數所代替了。

3。 定義函式。用巨集定義函式,需要非常小心,因為它是被編譯器按文字展開的,因此需要特別注意它的易誤讀性,該加的括號一定要加,同時要避免在巨集函式裡面定義變數。萬一變數和外面的變數名字相同,將會引起非常怪異難以debug的錯誤。

4。 使用編譯器內建的巨集。例如__line__,__file__是編譯器內建的用於記錄被編譯檔案的一些常用資訊的巨集。

5。 條件編譯。make release 和make debug的時候,區別就在於程式裡面有被這樣語句對包含的程式段:#ifdef debug #endif 和 #ifdef release #endif。

6。注釋掉一大段**。#if 0永遠為false,#if 1永遠為真。所以可以用#if 0和#if 1作為開關來注釋和開啟一段**。

在C 中定義VMprotect巨集

定義虛擬機器保護的巨集 define vmprotectbegin asm emit 0xeb asm emit 0x10 asm emit 0x56 asm emit 0x4d asm emit 0x50 asm emit 0x72 asm emit 0x6f asm emit 0x74 asm ...

c 巨集 val 在unicode下的使用。

define check condition cout 上面這句巨集,當你 check myfunc 時,假設myfunc返回false,會輸出 check failed myfunc 在巨集中,condition 是把引數轉換為字串,這在列印log時,可以很方便的列印出函式名稱等等 這個大家可能都...

在巨集中的作用

用於將兩個字串連線起來。例如 define declare dynamic class name public static cruntimeclass class class name virtual cruntimeclass getruntimeclass const 巨集 declare d...