我继承了一段 C++ 代码,其中有许多 #ifdef
分支来根据平台调整行为(#ifdef __WIN32
,#ifdef __APPLE__
等)。当前形式的代码不可读,因为这些预处理器指令是嵌套的,出现在函数中间,甚至出现在多行语句的中间。
我正在寻找一种方法,以某种方式指定一些预处理器标记并获取代码的拷贝,就好像代码已经用这些标志进行了预处理一样。不过,我希望#include 指令保持不变。 示例:
#include <iostream>
#ifdef __APPLE__
std::cout << "This is Apple!" << std::endl;
#elif __WIN32
std::cout << "This is Windows" << std::endl;
#endif
会变成:
#include <iostream>
std::cout << "This is Apple!" << std::endl;
在被处理之后:tool_i_want example.cpp __APPLE__
。
我破解了一个执行类似操作的快速脚本,但我想知道经过更好测试和更全面的工具。我正在运行 Linux 发行版。
我决定不只运行 C 预处理器,因为如果我没记错的话,它会扩展头文件,这会使所有内容变得更加不可读。
最佳答案
使用unifdef
.它就是为此目的而设计的。
关于c++ - 如何处理 C++ 文件以删除 ifdef 输出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40483031/