3

以下列方式定义变量时:

static register int a1 = 0;

我们得到错误:

error: multiple storage classes in declaration specifiers

这个错误有什么根本原因吗?为什么变量不能既存储在寄存器中,也只能在启动/第一次调用时初始化?可以将寄存器存储类附加到全局变量。<- 编辑:不是真的

4

3 回答 3

6

该标准不允许在声明中使用多个存储类说明符。

来自 C99 标准:

6.7.1 存储类说明符

1个存储类说明符:

typedef
extern
static
auto
register

2 在声明中的声明说明符中最多可以给出一个存储类说明符。

于 2016-01-08T15:56:54.177 回答
5

如果编译器忠实地实现了您想要的东西,那么它将占用一个 CPU 寄存器以适应您的程序的长度。这几乎不实用。

请记住,这register只是建议。

于 2016-01-08T15:52:36.257 回答
2

主要原因是寄存器限定符暗示变量具有自动存储持续时间。它基本上是一个自动变量,您告诉编译器最好将其放置在通用 CPU 寄存器中。

static限定符意味着静态或线程存储持续时间。

如果应用于同一个变量,显然两者是不兼容的!

这就像要求一个变量在它所属的激活记录被删除时(同时)死亡和生存。

于 2016-01-08T16:13:48.940 回答