我们可以在声明中的任何位置放置"typedef"说明符吗?
Can we place "typedef" specifier anywhere in the declaration?
typedef
说明符的语法:
typedef <existing_name> <alias_name>
例如:
typedef long unsigned int Int;
它工作正常。
但是,如果我typedef
放在声明中的任何位置,就像这样:
long unsigned typedef int Int;
然后,它也工作正常。
为什么?我们可以把typedef
放在宣言的任何地方吗?
首先,引用§6.11.5,"未来的语言方向">
1 在声明中将存储类说明符放置在声明说明符开头以外的位置是一种过时的功能。
因此,不要依赖此内容,因为它将来可能会被删除。
也就是说,要了解为什么会这样,请查看 C11 标准第 §6.7.2 章:
[...]类型说明符可以以任何顺序出现,可能 与其他声明说明符混合。
从 §6.7.1 中我们知道typedef
是一个存储类说明符(一种特定的声明说明符(,因此它可以放在类型说明符之后(或之前((即可以混合(。它不会改变任何东西。
这确实是C标准所允许的。typedef
是一个存储类说明符,如果您查看 C 标准(N1570,C11 的最新草案,§6.7 p1(中给出的语法:
语法
声明:
。声明说明符 init-declarator-list(opt( ;
.static_assert声明
声明说明符:
。存储类说明符声明说明符(选项
(。类型说明符声明说明符(
OPT(。类型限定符声明说明符
(OPT(。函数说明符声明说明符(选项
(。alignment-specifier declaration-specifiers(opt(
init-declarator-list:
.初始化声明器
。init-declarator-list ,init-declarator
init-declarator:
.声明符
。声明符 = 初始值设定项
存储类说明符可以出现在其他声明说明符(如类型说明符(之后。
但是你不应该使用它,它已经过时了,参见§6.11.5:
存储类说明符的位置,而不是在声明的开头 声明中的说明符是一个过时的功能。
- C++:TypeDef使用元组
- 激励'inline'说明符的真实世界示例?
- 缺少类型说明符,显式类型为"缺少错误"
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 为什么在使用typedef时类推导指南会失败
- 叮叮当当在修复时插入多个"覆盖"说明符
- 尝试根据类中 typedef 的存在来专门化模板函数
- 编译器错误:destuctor 的更宽松的抛出说明符
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 使用说明符 extern 声明的C++中的标识符链接
- 同时具有"外部"和"内联"说明符的变量
- 与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 出错(预期的类型说明符)
- 在类模板中使用 typedef 时出错
- 模板类中的 typedef 语句
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 我们可以在声明中的任何位置放置"typedef"说明符吗?
- typedef float _float32;的声明说明符中的两种或多种数据类型;
- 编译器错误:typedef 之前的预期嵌套名称说明符