首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于C编程语言的声明符-说明符,是否有更精确的语法?

对于C编程语言的声明符-说明符,是否有更精确的语法?
EN

Stack Overflow用户
提问于 2020-04-06 12:58:15
回答 1查看 95关注 0票数 1

扩展C标准中的“声明-说明符”的语法,我得到了一个语法,它允许许多语义上不合逻辑的说明符的组合。有没有人写过一种更精确的语法,允许更少的矛盾组合?语法的无序性(可以推测,这样程序员就不必记住一个说明符的顺序)使得这变得复杂起来。如果有一些符号来指定“任何一种选择的说明符,但只允许每种选择中的一种出现”(这并不是特别好的),就会有帮助。还是我撞错了树?例如,如果有一组很好的简洁的语义规则来指定哪些组合(不允许)在一起。根据我对C标准的解释,语法是

声明-说明符:(storage-class-specifier|type-specifier|type-qualifier|function-specifier|alignment-specifier)+

存储类说明符:'typedef'|'extern'|'static'|'_Thread_local'|'auto'|'register‘

类型说明符:'void'|'char'|'short'|'int'|'long'|'float'|'double'|'signed'|'unsigned'|'_Bool'|'_Complex‘name '_Atomic’(‘type-name ')’{##**$$}#\x{e76f}\{e76f}

类型-限定符:‘const’\{e76f}\

函数说明符:“内联”、“_Noreturn”

对齐-说明符:“_Alignas”(“类型名称”、“常量-表达式”)

EN

回答 1

Stack Overflow用户

发布于 2020-04-06 13:22:14

C标准不包含关于如何在特定对象声明中实现声明说明符、存储类说明符、类型说明符、数据类型说明符或对齐说明符的顺序的规则。

你可以随意把它们混为一谈。

引用ISO/IEC 9899:2018,第6.7.2/2节

“在每个声明中的声明说明符中,以及在每个结构声明和类型名称中的说明符-限定符列表中,至少应该给出一个类型说明符。每个类型说明符的列表应该是以下多个集合之一(在每个项有多个多集时,由逗号分隔);类型说明符可能以任何顺序出现,可能与其他声明说明符__混合。”

唯一的限制是,至少必须提供一个类型说明符和至少一个标识符,并且标识符必须位于声明的右侧。

顺便说一句,还有一件事要考虑,尽管它在语法上是正确的。在第一个位置以外的任何地方放置存储类说明符都是过时的。

引用ISO/IEC 9899:2011,第6.11.5节-存储类说明符:

“在声明中放置声明说明符以外的存储类说明符是一个过时的特性。”

因此,

代码语言:javascript
复制
static const long long int a;

可以写成:

代码语言:javascript
复制
static long int const long a;

代码语言:javascript
复制
static long const long int a;

代码语言:javascript
复制
static int const long long a;

但是,为了保持代码的可读性和对未来读者的清晰,您应该使用常见的约定。

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

https://stackoverflow.com/questions/61060424

复制
相关文章

相似问题

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