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

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’

person Grant Paul    schedule 24.05.2010    source источник
comment
Может быть, вы могли бы показать пример строки кода, которая генерирует ошибку?   -  person Dean Harding    schedule 24.05.2010
comment
Тем из нас, кто научился не допускать ошибок, которые вы делаете, сложно угадать, какую ошибку вы совершаете, поэтому иллюстрация может очень помочь.   -  person Jonathan Leffler    schedule 24.05.2010


Ответы (1)


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

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

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

person Joey Adams    schedule 24.05.2010