正在尝试解决此问题:C++ How can I prevent my team developers from using integer version of abs by mistake?通过使用宏使 abs
函数不再可用。
如果我使用 g++ 选项 -Dmyabs=abs
编译包含 myabs(3);
的代码,它会编译(myabs
被替换为 abs
),很好。
现在,如果我使用 g++ 选项 -Dabs=forbidden
编译包含 abs(3);
的代码,它也会编译...为什么它不报告 forbidden
未知?看起来 abs
在预处理过程中没有被 forbidden
替换...为什么?
最佳答案
Looks like abs is not replaced by forbidden during pre-processing...why?
至少我使用的标准库头文件 (libstdc++) 定义了 ::abs
,取消定义你的宏:
// Get rid of those macros defined in <math.h> in lieu of real functions. #undef abs #undef div // ...
您的 header 可能做同样的事情。鉴于这样的未定义,使用预处理器宏来禁止这样的功能确实是不可能的。
关于c++ - 不能使用预处理器语句禁止标准函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38500114/