使用单个define语句包含类似函数的宏的保护?

时间:2016-11-15 05:57:22

标签: c c-preprocessor

是否有办法只为此标题使用一个define语句,而不将类函数宏更改为函数?

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语句似乎很奇怪。

2 个答案:

答案 0 :(得分:4)

这就是你想要的:

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

答案 1 :(得分:2)

你的方法很好 - 它足以防止双重定义宏。如果要保护整个文件,添加定义保护通常很有用。这有助于缩短代码(因为您不必独立保护每个宏)并确保您具有一致的定义(例如,如果您想确保MINMAX一起定义)。 E.g:

#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建议的那样。