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



以以下方式定义变量时:

static register int a1 = 0;

我们得到错误:

error: multiple storage classes in declaration specifiers

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

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

来自C99标准:

6.7.1存储类说明符

1存储类说明符:

typedef
extern
static
auto
register

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

如果编译器忠实地实现了您想要的,那么它将占用与程序长度相当的CPU寄存器。这很难实现。

请记住,register只是建议性的。

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

static限定符表示静态或线程存储持续时间。

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

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

相关内容

  • 没有找到相关文章

最新更新