不能禁止使用预处理器语句的标准函数吗?

Can't make a standard function forbidden using a preprocessor statement?

本文关键字:标准 函数 语句 处理器 禁止 预处理 不能      更新时间:2023-10-16

试图解决这个问题:C++如何防止我的团队开发人员错误地使用整数版本的abs?通过使用宏使CCD_ 1函数不再可用。

如果我用g++选项-Dmyabs=abs编译一个包含myabs(3);的代码,它会编译(myabsabs取代),那就好了。

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

看起来abs在预处理过程中没有被禁止替换。。。为什么?

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

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

你的头可能也在做同样的事情。考虑到这样的不确定性,使用预处理器宏来禁止这样的函数确实是不可能的。