有没有办法'扩展'#define指令?

Pet*_*erK 3 c++ macros visual-studio c-preprocessor

#define在项目中有很多"愚蠢" ,我想删除它们.不幸的是,我不能做一个简单的搜索和替换,因为它#define是参数化的.例如:

#define FHEADGRP( x ) bool _process_grp##x( grp_id_t , unsigned char )
Run Code Online (Sandbox Code Playgroud)

这用于生成一些函数的头文件.我想以某种方式做与预处理器一样的事情 - 用结果替换宏的每个调用(插入正确的参数.我希望你理解我想做什么.

我发现使用Visual Studio,可以使用/ P选项获取预处理的中间文件.不幸的是,这对我没有帮助,因为该文件被数千个其他行"污染"并且所有#defines都已扩展.我不想这样做,我只想扩展一些宏,最好在我的IDE(即Visual Studio)中进行.有什么方法可以实现这个目标吗?

pax*_*blo 7

您通常可以获得预处理器的输出gcc -E(假设您gcc当然正在使用,但其他编译器往往具有相同的功能).

当然,处理该文件以自动将其扩展#define为其他文本并不是一项简单的任务.我可能会编写一个shell脚本(或Perl,因为在我看来,它更好地按摩文本)来自动完成任务.


在Visual Studio中,您可以使用它/P来执行相同的操作.这可以根据此页面在IDE中设置.