自动变量问题

时间:2016-09-05 06:15:07

标签: c

我知道C中的存储类。我想知道auto关键字。

在以下表达式中,

auto int i = 0;

auto是存储类说明符,int是数据类型。

但如果我们写:

int auto i = 0;

会发生什么? auto是否表现为数据类型?

2 个答案:

答案 0 :(得分:6)

关于类型说明符({{1})的存储类说明符(externstaticregisterautotypedef)的顺序},intdouble等)并不重要。两者都有效并声明相同的对象。

然而,遵守某个顺序被认为是一种好习惯。声明符之前的说明符限定符列表(在您的情况下为char)由不同的关键字组组成,这些关键字最好按以下顺序使用:

  • 存储类说明符(如果有):istaticexternautoregistertypedef(C11); < / LI>
  • 输入限定符(如果有):_Thread_localconstvolatile;
  • 类型修饰符(如果有):restrictsignedunsignedshort;
  • 类型说明符:longintchardouble等。

遵循该规则将导致更可读的声明:

float

而不是(一个极端的例子):

static const volatile unsigned long int a;

答案 1 :(得分:4)

C语法允许您将存储说明符放在两个位置,没有歧义,因为有效类型集的有效存储说明符之间的交集是空的。但是,通常我总是看到在类型之前写的存储说明符,所以你应该坚持这个约定以便于其他人阅读。

(同样,避免使用auto,没有人会使用它,因为它总是暗示,C ++甚至为具有推断类型的变量重新利用该关键字)