不能禁止使用预处理器语句的标准函数吗?
Can't make a standard function forbidden using a preprocessor statement?
试图解决这个问题:C++如何防止我的团队开发人员错误地使用整数版本的abs?通过使用宏使CCD_ 1函数不再可用。
如果我用g++选项-Dmyabs=abs
编译一个包含myabs(3);
的代码,它会编译(myabs
被abs
取代),那就好了。
现在,如果我用g++选项-Dabs=forbidden
编译一个包含abs(3);
的代码,它也会编译。。。为什么不报告forbidden
未知?在预处理过程中,似乎abs
未被abs
0替换。。。为什么?
看起来abs在预处理过程中没有被禁止替换。。。为什么?
至少我使用的定义::abs
的标准库头(libstdc++),取消定义您的宏:
// Get rid of those macros defined in <math.h> in lieu of real functions. #undef abs #undef div // ...
你的头可能也在做同样的事情。考虑到这样的不确定性,使用预处理器宏来禁止这样的函数确实是不可能的。
相关文章:
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 如何使用模板化标准::函数作为参数?
- 是否有任何 C 标准函数将值"1"传递给所有 (%s)
- 可变参数模板和标准::函数
- 是否有一个标准函数可以打印/监视stdin文件的内容,同时将数据留在stdin中
- 我怎样才能把这个标准::函数传递给标准::异步
- 如何使用标准::函数使用可变参数模板
- "AfxIsValidAddress"函数的等效标准函数是什么?
- 使用多个参数将成员功能指针转换为标准C函数
- C++:将标准::函数转换为gsl_function
- 标准::函数的 typename 关键字
- 将成员函数作为标准函数回调
- C++在全局命名空间中找不到非标准 C 函数
- 标准函数的函数指针和成员函数指针的规则是什么
- 如何使用数组创建标准::函数
- 如何在 Visual Studio 中测试时重写标准C++函数
- 在C++中使用标准 C 函数时,是否需要"std::"前缀?
- 链接器如何查找标准函数和WinAPI函数
- 标准::函数复制参数
- 互斥与标准函数调用