typedef
指定符的语法:
typedef <existing_name> <alias_name>
例如: for example:
typedef long unsigned int Int;
它运行良好。
但是,如果我在声明中的任何位置放置 typedef
,就像这样:
long unsigned typedef int Int;
然后,它也运行良好。
为什么?我们能在声明的任何位置放置typedef
吗?
typedef
指定符的语法:
typedef <existing_name> <alias_name>
例如: for example:
typedef long unsigned int Int;
它运行良好。
但是,如果我在声明中的任何位置放置 typedef
,就像这样:
long unsigned typedef int Int;
然后,它也运行良好。
为什么?我们能在声明的任何位置放置typedef
吗?
首先,引用自 §6.11.5,“未来语言方向”:
1 在声明中,存储类别说明符的放置位置不在声明说明符的开头是一个已过时的特性。
因此,不要依赖这个特性,因为它可能在未来被删除。
话虽如此,要理解为什么这样可以,请查看C11标准,第§6.7.2章:
[...]类型说明符可以按任何顺序出现,可能与其他声明说明符混合在一起。
从§6.7.1可以知道,typedef
是一个存储类别说明符(一种特定类型的声明说明符),因此它可以放置在类型说明符之后(或之前)(即,可以混杂使用)。这并不会改变任何东西。
typedef
是一种存储类说明符,可以在其他声明说明符之后出现,比如类型说明符。但是您不应该使用它,因为它已经过时了,参见§6.11.5。
int short static someVar;
也是合法的,对吧? - Sourav Ghoshtypedef
只是像extern
或static
一样的存储类说明符,因此可以与类型声明符混合使用。 - Serge Ballesta