什么是说明符限定符列表?

时间:2010-05-24 03:48:07

标签: gcc compiler-errors

GCC喜欢告诉我,我在错误消息中缺少说明符限定符列表。

我知道这意味着我没有输入正确的东西。

究竟是一个说明符限定符列表?

编辑:

导致此问题的示例C代码:

#include <stdio.h>

int main(int argc, char **argv) {
    struct { undefined_type *foo; } bar;
    printf("Hello, world!");
}

从GCC中提出这些错误:

Lappy:code chpwn$ gcc test.c
test.c: In function ‘main’:
test.c:4: error: expected specifier-qualifier-list before ‘undefined_type’

1 个答案:

答案 0 :(得分:5)

这是说明符和限定符的列表:-)说明符包括voidcharstruct Foo等,限定符是const和{{}}等关键字{1}}。有关定义,请参阅this C grammar

在您的情况下,volatile尚未定义,因此解析器将其视为标识符,而不是预期的说明符限定符列表。如果您在undefined_type出现之前typedef ... undefined_type;,则undefined_type将成为说明符。

如果您考虑使用无上下文语法解析C,编译器处理typedef等的方式可能很麻烦。如果我理解正确,它会通过偷偷摸摸符号表操作来游戏解析器生成器,这样它就可以使用上下文来解析源代码。