【发布时间】:2018-05-10 13:46:26
【问题描述】:
ANSI C 语法规定:
declarator:
pointer_opt direct-declarator
direct-declarator:
identifier
( declarator )
direct-declarator [ constant-expression_opt ]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-list_opt )
根据这个语法,可以推导出来
func()()
作为声明者,并且
int func()()
作为声明,这在语义上是非法的。为什么 C 语法允许这种语法上合法但语义上非法的声明?
【问题讨论】:
-
这真的是关于 C89 的吗?把语言律师放在那里?
-
语法的相关部分是
pointer:—* type-qualifier-listopt—* type-qualifier-listopt pointer和type-qualifier-list:—type-qualifier—type-qualifier-list type-qualifier。这些允许您为每个指针(const、volatile、restrict)提供无限数量的类型限定符,但这并不意味着将其中的 30 个连续写入是有意义的。是的,你在一个层面上是对的,但它大多是无关紧要的。 (数字中的数字是语法没有限制的另一个地方。...) -
这个语法在 C11 中实际上是一样的。
标签: c syntax grammar declaration c89