Я пишу собственный парсер C99. Я получил грамматику от ссылки this. Эта грамматика говорит следующее является допустимым синтаксисом для объявления массивов -Что означает звездочка внутри квадратной скобки объявления массива в C
int arr[*];
Соответствующая часть грамматики follwing -
direct-declarator ::=
identifier
"(" declarator ")"
direct-declarator "[" type-qualifier-list? assignment-expression? "]"
direct-declarator "[" "static" type-qualifier-list? assignment-expression "]"
direct-declarator "[" type-qualifier-list "static" assignment-expression "]"
direct-declarator "[" type-qualifier-list? "*" "]"
direct-declarator "(" parameter-type-list ")"
direct-declarator "(" identifier-list? ")"
Я попытался компиляции кода с этой декларацией с использованием GCC. Он дал мне следующее предупреждение -
error: ‘[*]’ not allowed in other than function prototype scope
Так что я попытался объявить прототип функции с этим типом синтаксиса и скомпилирован без каких-либо ошибок или предупреждений. То, что я не получаю, может означать, что этот синтаксис может означать семантически. Любой эксперт с объяснением?
Это просто явный способ выразить, что никакое значение не передается для этого измерения массива. (вы всегда должны указывать последние, но предшествующие размеры необязательны) (это ссылка, которую я искал) –
, возможно, прочитал остальную часть стандарта, если вы собираетесь написать парсер? –