3

我想要类似下面的 gperf 输入文件:

%{
#include <keywords.h>
// the contents of which contain
// #define KEYWORD1_MACRO "keyword1"
// #define KEYWORD2_MACRO "keyword2"
%}
%%
KEYWORD1_MACRO
KEYWORD2_MACRO
%%

不幸的是,gperf 会将这些解释为“KEYWORD1_MACRO”等。

这样做的原因是我有另一方提供的协议规范作为头文件,其中包含这样#define的 s. 所以我无法控制它们是如何定义的,我宁愿不必将另一个预处理工具写入#include标头并将宏的扩展输出为带引号的字符串,然后才用作 gperf 输入文件。

4

1 回答 1

2

我做了以下实验gcc -E来处理那些#includes。

关键字.h:

#define KEYWORD1_MACRO "keyword1"
#define KEYWORD2_MACRO "keyword2"

测试.c:

%{
#include "keywords.h"
%}
%%
KEYWORD1_MACRO
KEYWORD2_MACRO
%%

命令:gcc -E -o test.out.txt test.c
然后,test.out.txt 中的内容:

# 1 "test.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "test.c"
%{
# 1 "keywords.h" 1
# 3 "test.c" 2
%}
%%
"keyword1"
"keyword2"
%%

#includes 是自动处理的。然后,您可以进行一些文本处理并输入gperf.

于 2013-01-23T15:33:41.130 回答