自动变量问题

msc*_*msc 0 c

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

在以下表达式中,

auto int i = 0;
Run Code Online (Sandbox Code Playgroud)

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

但如果我们写:

int auto i = 0;
Run Code Online (Sandbox Code Playgroud)

怎么了?被auto表现为数据类型?

Bla*_*iev 6

的存储类说明符(排序extern,static,register,auto,typedef)相对于类型说明符(int,double,char等)并不重要.两者都有效并声明相同的对象.

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

  • 存储类说明,如果有的话:static,extern,auto,register,typedef,_Thread_local(C11);
  • 类型修饰符,如果有的话:const,volatile,restrict,
  • 类型修饰符,如果有的话:signed,unsigned,short,long,
  • 类型说明符:int,char,double,float,等.

遵循该规则将导致更可读的声明,如下所示:

static const volatile unsigned long int a;
Run Code Online (Sandbox Code Playgroud)

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

unsigned volatile int static const long a;
Run Code Online (Sandbox Code Playgroud)