是否有办法只为此标题使用一个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
语句似乎很奇怪。
答案 0 :(得分:4)
这就是你想要的:
#ifndef MIN
#define MIN(x, y) ((x) > (y) ? (y) : (x))
#endif
答案 1 :(得分:2)
你的方法很好 - 它足以防止双重定义宏。如果要保护整个文件,添加定义保护通常很有用。这有助于缩短代码(因为您不必独立保护每个宏)并确保您具有一致的定义(例如,如果您想确保MIN
和MAX
一起定义)。 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建议的那样。