gcc выдает ошибку в printf при компиляции вывода lex - PullRequest
1 голос
/ 07 февраля 2012

Для файла lex example.l я получаю ошибку ниже. Если я закомментирую printf, он уйдет. Я думал, что верхний раздел спецификации lex может содержать любой произвольный код на C между %{ и %}. Я должен быть в состоянии напечатать некоторый вывод прежде, чем lex совпадет с чем-либо. Что не так с тем, что я сделал, и как мне это исправить?

$ cat example.l 

%{
#include <stdio.h>
printf("foobar\n");
%}

%%

.       ECHO;

$ lex example.l 
$ gcc -g -L/usr/lib/flex-2.5.4a -lfl -o example lex.yy.c
example.l:3: error: expected declaration specifiers or '...' before string constant
example.l:3: warning: data definition has no type or storage class
example.l:3: error: conflicting types for 'printf'
example.l:3: note: a parameter list with an ellipsis can't match an empty parameter name list declaration

1 Ответ

1 голос
/ 07 февраля 2012

Если вы посмотрите на код здесь, вы увидите, что здесь происходит одна из двух вещей ... либо вы делаете #include внутри тела функции, которое не имеет смысла, либо вы вызываете printf() вне любой функции, что в равной степени неправильно.

Теперь, если принять во внимание, что это flex, это последнее. Возможно, вы снимали что-то более похожее на это:

%{
#include <stdio.h>
%}

%%

.       ECHO;

%%

int main() {
    printf("foobar\n");
    while (yylex() != 0);
    return 0;
}
...