c++ - 如何处理 C++ 文件以删除 ifdef 输出代码

标签 c++ c-preprocessor

我继承了一段 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/

相关文章:

c++ - 在具有内存限制的嵌入式系统中使用boost

c++ - 使用内联汇编获取变量地址

c++ - 如何从 vector 迭代的变换构造元组

c++ - 使用预处理器定义函数调用的缺点是什么?

c++ - 根据 Qt 版本动态使用 QGLWidget 或 QOpenGLWidget

Token 粘贴和串化的结合

c++ - C++ 迭代器是 "safe"吗?

c++ - C++运行时错误中的字符串

C 预处理器优先级

c++ - move 操作的条件编译