2016-11-15 42 views
1

有沒有辦法只爲這個頭部使用一個定義語句,而不會將類似函數的宏變成函數?使用單個定義語句和包含類似功能的宏的保護?

my.h文件:

#ifndef MY_H 
#define MY_H 
#define MIN(x, y) ((x) > (y) ? (y) : (x)) 
#endif 

例如,我能夠做一個常量以下:

pi.h文件:

#ifndef PI 
#define PI 3.14159 
#endif 

我也是知道的警告關於使用類似功能的宏如: https://stackoverflow.com/a/15575690/4803039

我只想看看是否有更優化/重構的方式。看起來奇怪的是,包含額外的#define語句,該語句定義了標題正文的其餘部分,而標題正文僅包含#define語句本身。

+1

儘量定義靜態內聯函數而不是宏。而且我不確定擁有這麼小的頭文件是明智的。我傾向於贊成擁有更少,但更大的頭文件,甚至可能只有一個頭文件(有關預編譯的內容,請參見[本](http://stackoverflow.com/a/12438040/841108)) –

回答

4

這是你想要什麼:

#ifndef MIN 
#define MIN(x, y) ((x) > (y) ? (y) : (x)) 
#endif 
+0

哦哇,我想我是超過這個哈哈。謝謝@Danh! –

2

你的方法就可以了 - 它足以防範雙重定義宏。如果要保護整個文件,添加定義警衛通常很有用。這可以縮短代碼(因爲您無需獨立保護每個宏),並確保您有一致的定義(例如,如果您想確保MINMAX一起定義)。例如: -

#ifndef MY_H 
#define MY_H 
#define MIN(x, y) ((x) > (y) ? (y) : (x)) 
#define MAX(x, y) ((x) < (y) ? (y) : (x)) 
#define PI 3.14159 
#endif 

如果你只是必須要定義一個宏/常量,您可以通過自己的定義守護它,就像@Danh建議。

相關問題