首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我们可以在声明中的任何地方放置"typedef“说明符吗?

我们可以在声明中的任何地方放置"typedef“说明符吗?
EN

Stack Overflow用户
提问于 2017-08-18 15:13:13
回答 2查看 511关注 0票数 17

typedef说明符的语法:

代码语言:javascript
复制
typedef <existing_name> <alias_name>

例如:

代码语言:javascript
复制
typedef long unsigned int Int;

它运行良好。

但是,如果我将typedef放在声明中的任何位置,如下所示:

代码语言:javascript
复制
long unsigned typedef int Int;

然后,它也运行得很好。

为什么?我们可以在声明中的任何地方放置 typedef 吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-18 15:20:02

首先是,引用自§6.11.5,“未来语言方向”

1声明中存储类说明符的位置不在声明说明符的开头,这是一个过时的特性。

所以,不要依赖它,因为它可能会在将来被删除。

也就是说,要了解其工作原理,请查看C11标准,第6.7.2章:

...类型说明符可以以任何顺序出现,可能与其他声明说明符混合出现。

从§6.7.1中,我们知道typedef是一个存储类说明符(一种特殊的声明说明符),因此它可以放在类型说明符之后(或之前)(即,可以混合)。它不会改变任何事情。

票数 17
EN

Stack Overflow用户

发布于 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

声明中存储类说明符的位置不在声明说明符的开头,这是一个过时的功能。

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

https://stackoverflow.com/questions/45750621

复制
相关文章

相似问题

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