我知道C中的存储类。我想知道auto
关键字。
在以下表达式中,
auto int i = 0;
auto
是存储类说明符,int
是数据类型。
但如果我们写:
int auto i = 0;
会发生什么? auto
是否表现为数据类型?
答案 0 :(得分:6)
关于类型说明符({{1})的存储类说明符(extern
,static
,register
,auto
,typedef
)的顺序},int
,double
等)并不重要。两者都有效并声明相同的对象。
然而,遵守某个顺序被认为是一种好习惯。声明符之前的说明符限定符列表(在您的情况下为char
)由不同的关键字组组成,这些关键字最好按以下顺序使用:
i
,static
,extern
,auto
,register
,typedef
(C11); < / LI>
_Thread_local
,const
,volatile
; restrict
,signed
,unsigned
,short
; long
,int
,char
,double
等。遵循该规则将导致更可读的声明:
float
而不是(一个极端的例子):
static const volatile unsigned long int a;
答案 1 :(得分:4)
C语法允许您将存储说明符放在两个位置,没有歧义,因为有效类型集的有效存储说明符之间的交集是空的。但是,通常我总是看到在类型之前写的存储说明符,所以你应该坚持这个约定以便于其他人阅读。
(同样,避免使用auto
,没有人会使用它,因为它总是暗示,C ++甚至为具有推断类型的变量重新利用该关键字)