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 · рейтинг 5 · Joey Adams
Это список спецификаторов и квалификаторов :-) Спецификаторы - это такие вещи, как void, char, struct Foo и т. Д., А квалификаторы - это такие ключевые слова, как const и volatile. См. эту грамматику языка C для определения.
В вашем случае undefined_type еще не был определен, поэтому синтаксический анализатор видел его как идентификатор, а не как список спецификаторов-квалификаторов, как ожидалось. Если бы вы были typedef ... undefined_type; до его появления, то undefined_type стал бы спецификатором.
Если вы думаете в терминах синтаксического анализа C с помощью контекстно-свободной грамматики, то, как компилятор обрабатывает typedef и тому подобное, может быть неприятным. Если я правильно понимаю, он играет с генератором синтаксического анализатора, скрываясь в операциях с таблицей символов, чтобы он мог использовать контекст для анализа исходного кода.