为什么不能一起使用静态和寄存器存储类?

时间:2016-01-08 15:49:46

标签: c compilation storage-class-specifier

以下列方式定义变量时:

static register int a1 = 0;

我们收到错误:

error: multiple storage classes in declaration specifiers

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

3 个答案:

答案 0 :(得分:6)

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

来自C99标准:

  

6.7.1存储类说明符

     

1 存储类说明符:

typedef
extern
static
auto
register
     

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

答案 1 :(得分:5)

如果编译器忠实地实现了你想要的东西,那么它会占用你的程序长度的CPU寄存器。这很难实用。

请记住register只是建议性的。

答案 2 :(得分:2)

主要原因是注册限定符意味着变量具有自动存储持续时间。它基本上是一个自动变量,您告诉编译器将它放在通用CPU寄存器中是好的。

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

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

这就像要求变量一样,当它所属的激活记录被删除时,它会在同一时间存活下来。