如何取消定义类似系统功能的宏?

时间:2017-04-07 14:36:58

标签: macos clang c-preprocessor

我正在尝试构建一个定义方法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? * /

我应该如何停用这个类似函数的宏?

1 个答案:

答案 0 :(得分:0)

这非常脆弱。是的,您可能可以使其工作,但对导入方式的非常小的更改将导致它再次失败(或者更糟糕的是,只是调用错误的代码)。您需要确保#undef包含在可能包含types.h的每个文件中,并且在定义后它未定义。这有很多方法可以打破。重命名您的功能。这个名字是。