利用clang和gcc進行巨集的研究

2021-06-25 07:50:35 字數 557 閱讀 3233

寫乙個巨集

#define maxx(x,y) ((x)>(y) ? (x):(y))

int main(int argc,char * argv)

}為了看到這個巨集轉換後的效果, 即替換後的效果, 可以使用gcc或clang命令。(gcc命令是以前編譯器使用的,現在普遍不再使用)

使用terminal對這個.m檔案進行轉換

$:gcc -e main.m   , 相同命令還有clang -e main.m ,  以及clang -s main.m。  具體可以看help文件

轉換後的效果**如下:

nsinteger a = 5, b=7;

int maxvalue = ((a)>(b) ? (a):(b));

nslog(@"max =%d", maxvalue);

這樣就很容易看有替換後的效果。 

比如在面對比較複雜的巨集定義, 就可以通過這種方式來轉換, 交看轉換後的效果是否一致。(如果把上面的巨集定義成 #define max(x,y) x>y?x:y)

然後在乙個複雜的使用場景中就可以很明顯看到這個巨集定義的問題。

gcc或clang中消除特定警告的方法

一般在編譯 時會有相當多的警告資訊,尤其當我們使用了 wall選項的時候.wall絕不是像其字面意思一樣開啟所有警告.不過它開啟的警告也相當多了.對於一些我們已知 無害 但仍然列印出來擠占可憐的控制台空間的警告,我們當然可以將其 遮蔽 掉.就拿以下 來說 include include includ...

GCC 可變引數的巨集

標準 c只支援可變引數的函式,意味著函式的引數是不固定的,例如printf 函式 的原型為 int printf const char format argument 而在gnu c中,巨集也可以接受可變數目的引數,例如 define pr debug fmt,arg.printk fmt,arg ...

TRANCE巨集的利用

trance 巨集有點像我們以前在c語言用的printf函式,是程式設計師在執行過程中輸出寫除錯資訊,使我們鞥了解程式的一些狀態。但是有一點不同的是 trance巨集只有在除錯狀態下才有輸出,然而printf函式在任何狀態下都有輸出。和printf函式一樣,trance函式可以接受多個引數 int ...