首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANSI C是这样吗?

ANSI C是这样吗?
EN

Stack Overflow用户
提问于 2012-07-23 12:43:54
回答 2查看 339关注 0票数 2

任何声明之前都可以使用const和易失性限定符。”

在一个在线测试系列中,我看到这个声明被标记为正确。但在标准C(89)中我可以看到

代码语言:javascript
复制
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,以便教育当局被告知问题错误与一些证据。

EN

回答 2

Stack Overflow用户

发布于 2012-07-23 12:50:55

类型-限定符声明-说明符(Opt)

允许类型限定符(如constvolatile )后面跟着声明-说明符。下面的声明说明符可以是函数声明。

票数 3
EN

Stack Overflow用户

发布于 2013-01-05 00:10:44

您确实可以将constvolatile放在任何声明之前,而不违反C的语法规则。这绝不意味着这样的构造有意义,不会被完全忽略,也不会因为其他原因触发编译错误。这只意味着它不会触发语法错误。

C89规范的第3.5.3节指出

如果函数类型的规范包含任何类型限定符,则该行为是未定义的。

这意味着将函数声明为constvolatile是完全合法的,只要您不实际调用该函数。如果你试着叫它,就不知道会发生什么。这是C语言中可以做的几件事之一,这些语法在技术上是合法的,但完全没有意义(比如语句1 == 3;x + 2;)。

要澄清您在编辑中的评论,请注意术语"ANSI C“和"C89”指的是同一件事。C的ANSI和ISO标准只在格式上有所不同。这些标准的内容通常被称为"C89“或"C90”(以区别于ANSI后来标准化的C99 )。当你说“我知道这不适用于国际标准化组织C89或以上”时,你的声明也包括"ANSI C“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11612796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档