C语言的声明符是否有更精确的语法?

凯夫·塞皮亚(Kev Sepia)

从C标准扩展“声明说明符”的语法后,我得到了一种语法,它允许语义上不合逻辑的说明符的许多组合。有没有人写出一种更精确的语法,允许更少的矛盾组合?看起来语法的无序性质(可能是可预期的,这样程序员就不必记住指定符的顺序)使这一过程变得复杂。如果有某种表示法来指定“选择符中的任何一个,但每个选择中只允许一个出现”,这将很有帮助(措辞不是特别好)。还是我吠错了树?例如,如果有一个很好的简洁的语义规则集,用于指定(不允许)一起使用哪些组合。根据我对C标准的解释,语法是

声明说明符:(存储类说明符|类型说明符|类型限定符|功能说明符|对齐说明符)+

storage-class-specifier:'typedef'|'extern'|'static'|'_Thread_local'|'auto'|'register'

类型说明符:'void'|'char'|'short'|'int'|'long'|'float'|'double'|'signed'|'unsigned'|'_Bool'|'__ Complex'| '_Atomic''('type-name')'| 结构或联合说明符| 枚举说明符| 类型定义名称

类型限定符:'const'|'restrict'|'volatile'|'__ Atomic'

功能说明符:“内联” | '_Noreturn'

对齐说明符:'_Alignas''('类型名称|常量表达式')'

约翰·波德

语言定义中有单独的约束,用于指定声明说明符的哪些组合是合法的。它不在语法本身内指定。例如:

6.7.2类型说明符
...
约束

2每个声明中的声明说明符以及每个struct声明和类型名称的specifier-qualifier列表中应至少提供一个类型说明符。类型说明符的每个列表应为以下多个集合之一(当每个项目有多个集合时,用逗号分隔);类型说明符可以以任何顺序出现,并且可能与其他声明说明符混合使用。

—无效
— char
—带符号的char
—无符号的char
—短,带符号的short,short int或signed short int
—无符号的short或unsigned short int
— int,带符号的或signed int
—无符号的或unsigned int
— long,有符号long,long int或signed long int
— unsigned long或unsigned long int
— long long,有符号long long,long long int或signed long long int
—无符号long long或unsigned long long int
—浮点数
— double
— long double
— _Bool
— float _Complex
— double _Complex
— long double _Complex
—原子类型说明符
—结构或联合说明符
—枚举说明符
— typedef名称

C 2011在线草案

尽管所有这些可能可以在语法中进行编码,但这样做会很麻烦。我认为,将其设置为单独的约束可以使生活更轻松(并且还可以更轻松地引入新组合或弃用旧组合)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否有比ping更精确的批处理计时器?

来自分类Dev

Boyer 是否更精确的子串匹配动态规划的范式?

来自分类Dev

更精确的houghline OpenCV

来自分类Dev

更精确的houghline OpenCV

来自分类Dev

更精确的滚动

来自分类Dev

网络爬虫 C# . 也许比这更精确的网络爬虫

来自分类Dev

在C语言中,是否存在一个extern函数的声明,该声明不包含与原始声明等效的const / restrict限定符?

来自分类Dev

Java float比double更精确?

来自分类Dev

如何使此功能更精确?

来自分类Dev

C ++是否具有指定值范围的比较运算符?(例如E语言中的“ in”)?

来自分类Dev

C#的默认运算符是否具有等效的PowerShell,如果是,语法是什么?

来自分类Dev

对于接近于单位的值,浮点数学是否更精确?

来自分类Dev

是否可以获得更精确的反向地理编码?

来自分类Dev

是否有带有“横向”赋值运算符的语言?

来自分类Dev

在具有多种数据类型的ADT上更精确的模式匹配?

来自分类Dev

GLSL OpenGL如何具有更精确的双精度矢量变量,例如dvec3

来自分类Dev

C声明语法

来自分类Dev

C ++是否有非模板元语言?

来自分类Dev

C ++是否有非模板元语言?

来自分类Dev

用C语言声明数组而没有初始大小

来自分类Dev

哪种距离计算(经度,纬度)更精确?

来自分类Dev

列出比yyyy / mm / dd更精确的消息

来自分类Dev

边界位置更多,形状更精确

来自分类Dev

为什么精确的图像没有精确的描述符?

来自分类Dev

Nix 语言中有效标识符的语法是什么?

来自分类Dev

用语言C。如何获取先前声明的变量的左值标识符?

来自分类常见问题

C声明符理解

来自分类Dev

C声明符理解

来自分类Dev

用C语言声明

Related 相关文章

热门标签

归档