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

Why can't the static and register storage classes be used together?

当按以下方式定义变量时:

static register int a1 = 0;

我们收到错误:

error: multiple storage classes in declaration specifiers

这个错误有什么根本原因吗?为什么不能将变量既存储在寄存器中又仅在 start up/first 调用时初始化? 可以将寄存器存储 class 附加到全局变量。 <- 编辑:不正确

如果编译器忠实地实现了你想要的,那么它会占用一个 CPU 寄存器来满足你的程序长度。太不实用了。

请记住,register 仅供参考。

标准不允许在声明中使用多个 storage-class 说明符。

来自 C99 标准:

6.7.1 Storage-class specifiers

1 storage-class-specifier:

typedef
extern
static
auto
register

2 At most, one storage-class specifier may be given in the declaration specifiers in a declaration.

主要原因是register限定符暗示了变量有自动存储期限。它基本上是一个自动变量,您告诉编译器最好将其放入通用 CPU 寄存器中。

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

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

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