2010-05-24 2 views
5

GCC любит рассказывать мне, что я пропускаю список спецификаторов-спецификаторов в сообщениях об ошибках.Что такое спецификатор-список-определитель?

Я знаю, что это означает, что я не ввел правильный тип чего-то.

Но что именно является спецификатором-классификатором-списком?

Edit:

Пример 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’ 
+2

Возможно, вы можете показать пример строки кода, которая генерирует ошибку? –

+1

Трудно для тех из нас, кто научился не делать какой бы то ни было ошибки, которую вы делаете, чтобы угадать, какую ошибку вы делаете *, поэтому иллюстрация очень поможет. –

+1

Я добавил пример. –

ответ

5

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

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

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

Смежные вопросы