編譯預處理(巨集定義練兵場)

2021-08-03 07:16:47 字數 483 閱讀 2077

上個月寫了一篇有關編譯預處理內容的部落格,其中介紹到了巨集定義,並且舉了幾個簡單的例子說明了一下,巨集定義是如何「忠實」展開的。最近碰到了乙個問題,發現對巨集定義「忠實」展開還是沒有深刻了解,下面把這道題記錄下來:

#include

#define min(x,y) (x)<(y)?(x):(y)

int main()

上述**輸出結果為?

【典型錯誤】剛開始拿到這道題還是下意識的以函式的思維去理解了,把i,j兩個變數傳給min(x,y),然後做其後面的運算,並將結果返回到主函式中,最後得到k=10*10,輸出結果是100。

【正確思路】一定牢記「忠實」展開,這個忠實的過程是指:k=10*(x)<(y)?(x):(y),即將min(i,j),直接替換為min(x,y)後面的字元,這裡面的x對應於i,y對應於j。那麼k=10*10<15?10:15,即k=100<15?10:15所以最後輸出的結果為15。

預處理 巨集定義 條件編譯

可以用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串 巨集定義語法 define 巨集名 字串 使用原則 1 原樣替換 2 不能代替函式 3 定義時字尾不要加分號。帶引數的巨集定義 include define s a,b a b 注意,此處不能加分號,否則就變成了s a b in...

預處理 巨集定義

1,預處理 預處理是指在進行編譯的第一遍掃瞄 詞法掃瞄和語法分析 之前所作的工作。預處理是 語言的乙個重要功能,它由預處理程式負責完成。當對乙個原始檔進行編譯時,系統將自動引用預處理程式對源程式中的預處理部分作處理,處理完畢自動進入對源程式的編譯。語言提供了多種預處理功能,如巨集定義 檔案包含 條件...

預處理編譯 巨集 define

預處理 main.c pre sccess created by qianfeng on 14 11 3.include define zoe0 0 define pi a 2.1415926 a undef pi 表示在undef以上的pi巨集都被登出,無效。undef pi 定義字串巨集函式 d...