为什么不能一起使用静态和寄存器存储类?
以下列方式定义变量时:
static register int a1 = 0;
我们得到错误:
error: multiple storage classes in declaration specifiers
这个错误有什么根本原因吗? 为什么变量既不能存储在寄存器中,也只能在启动/第一次调用时初始化? 可以将寄存器存储类附加到全局变量。 < – 编辑:不是真的
如果编译器忠实地实现了你想要的东西,那么它会占用你的程序长度的CPU寄存器。 这几乎不实用。
请记住, register
只是建议性的。
该标准不允许在声明中使用多个存储类说明符。
从C99标准:
6.7.1存储类说明符
1个存储类说明符:
typedef extern static auto register
2最多可以在声明中的声明说明符中给出一个存储类说明符。
主要原因是寄存器限定符意味着变量具有自动存储持续时间 。 它基本上是一个自动变量,您告诉编译器将它放在通用CPU寄存器中是很好的。
static qualifier表示静态或线程存储持续时间。
显然,如果应用于同一个变量,这两个是不兼容的!
这就好像要求一个变量在其所属的激活记录被删除时死亡并存活(同时)。