“任何声明之前都可以使用const和易失性限定符。”
在一个在线测试系列中,我看到这个声明被标记为正确。但在标准C(89)中我可以看到
declaration:
declaration-specifiers init-declarator-listopt ;
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer从上面看来,这句话对一些声明来说可能是假的。
请帮帮我!
编辑:我知道这是无效的ISO C89或以上,但请建议ANSI,以便教育当局被告知问题错误与一些证据。
发布于 2012-07-23 12:50:55
类型-限定符声明-说明符(Opt)
允许类型限定符(如const或volatile )后面跟着声明-说明符。下面的声明说明符可以是函数声明。
发布于 2013-01-05 00:10:44
您确实可以将const或volatile放在任何声明之前,而不违反C的语法规则。这绝不意味着这样的构造有意义,不会被完全忽略,也不会因为其他原因触发编译错误。这只意味着它不会触发语法错误。
C89规范的第3.5.3节指出
如果函数类型的规范包含任何类型限定符,则该行为是未定义的。
这意味着将函数声明为const或volatile是完全合法的,只要您不实际调用该函数。如果你试着叫它,就不知道会发生什么。这是C语言中可以做的几件事之一,这些语法在技术上是合法的,但完全没有意义(比如语句1 == 3;或x + 2;)。
要澄清您在编辑中的评论,请注意术语"ANSI C“和"C89”指的是同一件事。C的ANSI和ISO标准只在格式上有所不同。这些标准的内容通常被称为"C89“或"C90”(以区别于ANSI后来标准化的C99 )。当你说“我知道这不适用于国际标准化组织C89或以上”时,你的声明也包括"ANSI C“。
https://stackoverflow.com/questions/11612796
复制相似问题