Может ли 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" и т. Д.

Причина этого в том, что у меня есть спецификация протокола, предоставленная другой стороной в виде заголовочного файла, содержащего #defines. Так что я не могу контролировать, как они определены, и я бы предпочел не писать другой инструмент предварительной обработки для #include заголовок и выводит расширение макросов в виде строк в кавычках, только тогда для использования в качестве входного файла gperf.

1 ответ

Решение

Я сделал следующий эксперимент, который использует gcc -E иметь дело с теми #includes.

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,

Другие вопросы по тегам