C 预处理器宏中的正则表达式

Regular expressions in C preprocessor macro

提问人:Paulo Neves 提问时间:10/8/2011 更新时间:6/19/2012 访问量:4900

问:

我想知道编译器(GCC)预处理器中是否有任何类型的正则表达式扩展。基本上是更灵活的代码生成宏。

如果没有办法,你建议我如何实现相同的结果

C 正则表达式

评论

0赞 krs1 10/8/2011
如果您提供了实际问题的更多详细信息,有人可能会知道解决方法。
0赞 Paulo Neves 10/8/2011
我有多种情况,这样的事情是有用的。例如,获取一堆枚举成员并自动创建它们的 switch 语句,这样即使添加了成员,代码也会使用默认实现或 #error 进行更新。如果你发现这是非常重要的信息,我会把它放在问题中
0赞 Agnius Vasiliauskas 10/9/2011
@aiwarrior - 因为你是上面指定的问题 - 你可以使用 X-macro 技巧来同时生成 ENUM 和 SWITCH 语句。此外,您还可以在这本电子书 - 第 173 页 - “预处理器 II 的实际应用:X 宏技巧”中阅读有关 x-macros 的信息。

答:

5赞 Gregory Pakosz 10/8/2011 #1

C 预处理器无法做到这一点。

您可能希望使用模板处理器(例如 Mustache,但还有许多其他处理器)在将模板传递给编译器之前生成所需的内容。

评论

0赞 Paulo Neves 10/8/2011
这确实是我从未听说过的事情,看起来它会有很大帮助。我将等待更多答案,看看是否有其他解决方案
1赞 RushPL 10/8/2011 #2

此外,如果你正在计划一个更大的项目,并且你知道这个功能是有益的,你可能想要编写自己的预处理器,你可以从某个构建系统自动运行。这种解决方案的好例子是moc,它为Qt框架的目的增强了C++。纯粹主义者当然可能不同意。

评论

0赞 Gregory Pakosz 10/8/2011
我不是纯粹主义者,我不同意。qmake 与 Qt 对 C++ 的预处理无关。这是moc!doc.qt.nokia.com/latest/moc.html
0赞 Paulo Neves 10/8/2011
虽然我不同意 QMAKE 在语言本身方面的不透明工作方式,但这本身就是一个项目,而且我不需要那么多的火力
0赞 RushPL 10/8/2011
当然,我在想moc..我的错!需要更多的睡眠。;-)
0赞 Foad S. Farimani 11/13/2019
与 Moc 的链接已断开
0赞 over_optimistic 11/11/2011 #3

有这个 https://github.com/graph/qc qc = Quick C,它允许您在以 qc.h 结尾的源代码文件中执行此操作

$replace asdf_(\d+) => asdf_ :) $1 blabla

// and now in your code anything that matches the above regular expression
asdf_123
// will become asdf_ :) 123 blabla

它将输出一个预处理的 .cpp 和 .h。它是为了避免维护头文件的需要。还有一些其他东西不能使它向后兼容 c++,但它会输出 c++ 代码,这样你就可以在一天结束时做所有你想做的 c++ 事情。

编辑:我做到了,并且偏向于qc。

0赞 Wayne 6/19/2012 #4

你可能想看看 re2c.org。它是一个单独的 C 预处理器来生成 用于匹配正则表达式的 C 代码。我在寻找时发现了那个和你的问题 类似的东西。