巨集定義和括號

2021-06-20 01:49:36 字數 725 閱讀 5093

為了盡量避免邊際效應,巨集定義時常要注意括號的使用。

例如在編寫乙個簡單的min巨集時,我們需要加上足夠括號才能保證結果盡可能的正確。

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

但有些情況下,加上括號卻是「畫蛇添足」的。

例如,用預處理指令#define宣告乙個常數,用以表明1年中有多少秒。

#define seconds_per_year (60*60*24*365)ul

單純這一條巨集定義是沒有什麼錯誤的,但如果替換到源**中就會出現語法錯誤。

**錯了呢?錯在不應該加括號。

在整數值後面新增l或者l(小寫的l,為了避免視覺錯誤最好使用l),表示此整數為long整型。

在整數值後面新增u或者u,表示此整數為unsigned整型。

如果各新增乙個,也就是都在整數值直接加上後面加上u和l,那就表示unsigned long int型。

數值後面直接加u或者l才行,前邊加上括號就不行了。

所以,正確的寫法應該是這樣

#define seconds_per_year 60*60*24*365ul

或者#define seconds_per_year 60*60*24*365lu

l和u不分前後,但從可讀性的角度來講在數值後面加ul更符合我們的閱讀習慣。

總結,巨集定義會暗藏很多意想不到的危險,而搭配括號可以減小這種危險出現的可能性,但從根本而言改變不了巨集定義的本質(字元替換)。

abs int 巨集定義 巨集定義和巨集方法

巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...

巨集定義和巨集編譯

以下是巨集定義的一些用法11.4.2 if defined else endif 此編譯指令為 ifdef else endif的等價編譯指令。其語法格式如下 if defined 常量表示式 段1 else 段2 endif 或 if defined 常量表示式 段1 else 段2 endif ...

C語言巨集定義和巨集定義函式

c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...