尝试解决此问题: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
取代......为什么?
答案 0 :(得分:1)
看起来abs在预处理过程中没有被禁止取代......为什么?
至少我使用的标准库头文件(libstdc ++)定义了::abs
,取消定义你的宏:
// Get rid of those macros defined in <math.h> in lieu of real functions. #undef abs #undef div // ...
你的标题可能会做同样的事情。鉴于这种不确定性,使用预处理器宏实际上不可能禁止这样的功能。