c++ 如何使用一些预处理程序#define生成源文件

bnl4lu3b  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一些C/C++源文件(.hpp、.cpp),其中包含以下内容

...
   #define SOME_DEFINE(t)  some_ns::some_type<t>
...

// define is somehow used later in the code

我想有一个修改的源代码(可读性),有所有的SOME_DEFINE(t)将被替换在这个文件中。
所以我绝对不愿意应用预处理器编译器步骤-只替换这个#define,并且只针对这个源文件。

pu3pd22g

pu3pd22g1#

你有几个选择..

  • 运行预处理器并存储输出。对于gcc,在预处理器之后获得输出是-E。这取决于源代码中使用了多少其他预处理,这可能是可行的。
  • 使用正则表达式进行搜索和替换。
  • 使用模板别名template <typename T> SOME_DEFINE = some_ns::some_type<T>;,然后通过正则表达式使用搜索和替换将SOME_DEFINE(t)替换为SOME_DEFINE<T>
  • 找到一个开箱即用的工具。实际上我不知道有这样的工具,尽管工具的推荐无论如何都是离题的。在一条评论中提到了https://dotat.at/prog/unifdef/

相关问题