typedef
说明符的语法:
typedef <existing_name> <alias_name>
例如:
typedef long unsigned int Int;
它运行良好。
但是,如果我将typedef
放在声明中的任何位置,如下所示:
long unsigned typedef int Int;
然后,它也运行得很好。
为什么?我们可以在声明中的任何地方放置 typedef
吗?
发布于 2017-08-18 15:20:02
首先是,引用自§6.11.5,“未来语言方向”
1声明中存储类说明符的位置不在声明说明符的开头,这是一个过时的特性。
所以,不要依赖它,因为它可能会在将来被删除。
也就是说,要了解其工作原理,请查看C11标准,第6.7.2章:
...类型说明符可以以任何顺序出现,可能与其他声明说明符混合出现。
从§6.7.1中,我们知道typedef
是一个存储类说明符(一种特殊的声明说明符),因此它可以放在类型说明符之后(或之前)(即,可以混合)。它不会改变任何事情。
发布于 2017-08-18 15:23:00
这确实是C标准所允许的。typedef
是一个存储类说明符,如果你看看C标准中给出的语法(N1570,C11的最新草案,§6.7 p1):
语法
声明:
。声明说明符init声明符列表(Opt);
。static_assert-声明
声明说明符:
。存储类说明符声明说明符(Opt)
。类型说明符声明说明符(Opt)
。类型-限定符声明-说明符(Opt)
。函数-说明符声明-说明符(Opt)
。对齐-说明符声明-说明符(Opt)
init-declarator list:
。init-声明者
。初始化声明者列表,初始化声明者
init-声明者:
。声明器
。声明者=初始化器
存储类说明符可以出现在其他声明说明符之后,如类型说明符。
但是你不应该使用它,它已经过时了,参见§6.11.5
声明中存储类说明符的位置不在声明说明符的开头,这是一个过时的功能。
https://stackoverflow.com/questions/45750621
复制相似问题