打印
[其他产品]

C++ 取消宏定义的方法,及三种应用

[复制链接]
1433|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-4-19 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C++取消已定义宏的方法
C++中,如果要取消之前已经定义好的宏,则可以使用#undef预处理指令来实现。要明确的一点是,这也是预处理指令,是在预处理阶段执行的指令,而非编译阶段,因此,#undef预处理指令的使用位置应该是在C++的函数之外,比如主函数main()之外。

C++ #undef语法
#undef 宏名称

提示:与宏的定义一样,#undef语句后面不添加“;”作为结尾。

#undef应用
我们可以尝试着思考一个问题,在程序中为什么要取消已定义的宏呢?现汇总了一些可能用到#undef预处理指令的地方,如下(仅供参考):

虽然可以直接使用#define预处理指令直接对已定义好的宏进行重新定义,但先使用#undef来取消宏定义不但是个好的编程习惯,而且可以(向程序员)清晰地表明程序设计的意图,提高代码的可读性和可维护性,当然了,也可以避免一些不必要的麻烦;

控制作用域,避免命名冲突:使用#undef预处理指令来取消某一个宏,就可以将该宏及其定义的内容的“作用域”限制在当前源文件或头文件内,比如该宏在当前文件中是某一个值,在另一个文件中则是另一个值;

用于取消辅助宏:在头文件中,有些宏只是临时的辅助宏而已,可以在头文件的末尾使用#undef来取消,避免其它包含该头文件的源文件中标识符上的冲突;

C++ #undef实例代码
如下实例代码,使用#undef取消了预定义的宏__FILE__,该宏包含当前源文件的路径和文件名,然后尝试在主函数内调用该宏,编译器会提示:undefining "__FILE__" [-Wbuiltin-macro-redefined]

#include <iostream>
using namespace std;
#undef __FILE__

int main(){
    cout << __FILE__ << endl;
    return 0;
}
免责声明:内容仅供参考,不保证正确性。

使用特权

评论回复
沙发
xuanhuanzi| | 2024-4-19 09:10 | 只看该作者
有时候这个预编译指令是很方便的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1191

主题

5220

帖子

12

粉丝