我想要类似以下 gperf 输入文件的内容:

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

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

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

最佳答案

我做了以下实验,它使用 gcc -E 来处理那些 #include s。

关键字.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"
%%
#include 是自动处理的。然后,您可以进行一些文本处理并输入 gperf

关于c++ - gperf 可以接受宏定义的关键字吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14480811/

10-12 13:29