无法使用预处理程序语句禁止使用标准函数?

时间:2016-07-21 09:22:20

标签: c++ c-preprocessor

尝试解决此问题:C++ How can I prevent my team developers from using integer version of abs by mistake?使用宏使abs函数不再可用。

如果我使用g ++选项myabs(3);编译包含-Dmyabs=abs的代码,则编译(myabs替换为abs),很好。

现在,如果我使用g ++选项abs(3);编译包含-Dabs=forbidden的代码,它也会编译...为什么它不报告forbidden未知?在预处理过程中,abs似乎没有被forbidden取代......为什么?

1 个答案:

答案 0 :(得分:1)

  

看起来abs在预处理过程中没有被禁止取代......为什么?

至少我使用的标准库头文件(libstdc ++)定义了::abs,取消定义你的宏:

// Get rid of those macros defined in <math.h> in lieu of real functions.
#undef abs
#undef div
// ...

你的标题可能会做同样的事情。鉴于这种不确定性,使用预处理器宏实际上不可能禁止这样的功能。