【发布时间】:2013-12-16 13:01:20
【问题描述】:
我需要扩展一个预处理器指令,例如:
拥有一个源文件和两个标头,我只想从一个特定标头扩展一个 define,而保留所有其他 include 和 define 不变。
主要思想是,给定类似这样的代码:
defs.h:
#define FOO(X,op) int X(int a,int b) { return a op b; }
other_file.h:
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
#define FIVE 5
main.c:
"file: main.c "
#include <stdio.h>
#include "defs.h"
#include "other_file.h"
FOO(add,+)
FOO(sub,-)
FOO(mul,*)
FOO(div,/)
int main()
{
printf("%d\n",add(ONE,TWO));
printf("%d\n",sub(THREE,FOUR));
printf("%d\n",mul(FIVE,FIVE));
printf("%d\n",div(25,FIVE));
return 0;
}
我会让 main.c 输出具有相同的包含,但将 FOO 扩展到创建的函数。我知道这个例子很傻,但我打算在更大的代码数据库上运行它。
这样做的动机是在宏中定义的函数中运行cccc。运行它的最简单方法是扩展这些宏。我也欢迎其他方法来做到这一点。
【问题讨论】:
-
您不能这样做(除非对源文件进行大量的预处理)。我会用更简单的正则表达式方法来做到这一点(只需用你喜欢的脚本语言编写你自己的预处理器,perl?)
-
好吧,我更喜欢python。将“函数”(使用正则表达式)放到临时文件中,运行预处理器并将其放回处理后的文件中的想法太丑陋了?
-
不,没关系,但我不会覆盖原始文件。例如,您可以将源文件从 .C 重命名为 .raw.C,并且您的预处理器可以读取所有 .raw.C 文件以生成纯 .C 文件。如果你必须改变一些东西......
标签: c-preprocessor code-metrics