Я хотел бы что-то вроде следующего входного файла 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.
Я сделал следующий эксперимент, который использует gcc -E
иметь дело с теми #include
s.
keywords.h:
#define KEYWORD1_MACRO "keyword1"#define KEYWORD2_MACRO "keyword2"
test.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
,
Других решений пока нет …