Что такое список спецификатора спецификатора?

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’
5
задан Grant Paul 24 May 2010 в 04:31
поделиться

1 ответ

Это список спецификаторов и квалификаторов :-) Спецификаторы — это такие вещи, как void, char, struct Foo и т. Д., А квалификаторы — это ключевые слова, такие как const и volatile. См. эту грамматику C для определения.

В вашем случае undefined_type еще не был определен, поэтому синтаксический анализатор рассматривал его как идентификатор, а не как список спецификатор-квалификатор-список, как ожидалось. Если бы вы typedef ... undefined_type; до его появления, то undefined_type станет спецификатором.

Если вы думаете с точки зрения синтаксического анализа C с контекстно-свободной грамматикой, то, как компилятор обрабатывает typedefs и тому подобное, может быть надоедливым. Если я правильно понимаю, он обыгрывает генератор парсера, пробираясь в операции таблицы символов, чтобы он мог использовать контекст для синтаксического анализа исходного кода.

5
ответ дан 14 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: