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

Mao*_*man 3 c compilation storage-class-specifier

以下列方式定义变量时:

static register int a1 = 0;
Run Code Online (Sandbox Code Playgroud)

我们得到错误:

error: multiple storage classes in declaration specifiers
Run Code Online (Sandbox Code Playgroud)

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

R S*_*ahu 6

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

从C99标准:

6.7.1存储类说明符

1个存储类说明符:

typedef
extern
static
auto
register
Run Code Online (Sandbox Code Playgroud)

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

  • 在C11中,这不再是真的,因为`_Thread_local`可以与`static`和`extern`结合使用. (3认同)

Bat*_*eba 5

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

请记住,这register只是建议.