为什么静态和寄存器存储类不能一起使用?
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 限定符表示静态或线程存储持续时间。
显然,如果应用于同一个变量,两者是不兼容的!
这就像要求一个变量在它所属的激活记录被删除时(同时)死亡和存活。
当按以下方式定义变量时:
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 限定符表示静态或线程存储持续时间。
显然,如果应用于同一个变量,两者是不兼容的!
这就像要求一个变量在它所属的激活记录被删除时(同时)死亡和存活。