【发布时间】:2017-04-07 14:36:58
【问题描述】:
我正在尝试构建一个定义方法howmany() 的代码。
在 OSX 中,/usr/include/sys/types.h 中有一个类似函数的同名宏
#define howmany(x, y) __DARWIN_howmany(x, y)
在a previous question 之后,我尝试在头文件中包含#undef
#ifdef howmany
#undef howmany /*undefining '/usr/include/sys/types.h' */
#endif
但类似函数的宏仍然处于活动状态。
/usr/include/sys/types.h:184:9: 注意:这里定义的宏 'howmany' #define howmany(x, y) __DARWIN_howmany(x, y) /* # y's == x bits? */
我应该如何停用这个类似函数的宏?
【问题讨论】:
-
我刚刚试了一下,
#include <sys/types.h>之后的一个简单的#undef howmany对我来说效果很好。 -
这是非常脆弱的。是的,您可能可以让它工作,但是对导入内容的方式进行非常小的更改会导致它再次失败(或者更糟糕的是,只是调用了错误的代码)。您需要确保
#undef包含在每个可能包含types.h的文件中,并且在定义后未定义。这是它可以打破的多种方式。重命名您的函数。这个名字被占用了。 -
@Rob Napier 请回答。这是一个很好的,我想投赞成票。我也希望这是一个已回答的问题,以便它脱离我的“答案:0”列表。 Q/A 对比 Q/评论对好得多。你是对的。
标签: macos clang c-preprocessor