Глядя на https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#direct-abstract-declarator, кажется, что int f((int));
можно интерпретировать как
- 'функция f (int)' с использованием правила
'(' abstract_declarator ')'
или - 'function f (function (int))', использующая правило
'(' parameter_type_list ')'
.
Однако, когда я компилирую файл с bison
, он не упоминает никаких конфликтов сдвига-уменьшения, кромеболтаться, если / еще.cdecl
просто говорит «синтаксическая ошибка».GCC и Clang, кажется, анализируют это как 2:
$ gcc -x c - -o /dev/stdout -S "$@"
int f((int));
<stdin>:1:7: error: expected declaration specifiers or '...' before '(' token
$ clang -x c - -o /dev/stdout -S "$@"
int f((int));
<stdin>:1:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
Как правильно это проанализировать?Достаточно ли это загадочно, чтобы я мог предположить, что никто не использует эту часть языка?