Может ли gperf принимать ключевые слова, определенные макросами?
Я хотел бы что-то вроде следующего входного файла 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.
1 ответ
Я сделал следующий эксперимент, который использует 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
,