我得到错误:未指定'i'的注册名称

use*_*208 4 c

#include <stdio.h>
register int i = 10;
int main(void)
{
    printf( " i = %d \n ", i );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将变量i声明为寄存器.但是,在编译时显示以下错误

" error: register name not specified for ‘i’ "
Run Code Online (Sandbox Code Playgroud)

为什么我们不应该在全局使用register关键字?

Cra*_*lus 10

register变量是一个类型的本地变量.
它是一个提示,将值存储在寄存器中以便更快地访问.
寄存器变量不能是全局的或静态的.
它只能在一个块中定义.
另外,请格式化您发布的代码


Jen*_*edt 5

变量register不能用作“全局”变量,因为文件范围变量具有静态存储,因此根据定义它们有一个地址。register变量恰恰相反,你作为程序员,承诺永远不会获取它们的地址。所以将两者结合起来并没有多大意义。

顺便说一句,您收到的错误消息不是很有帮助。您的编译器似乎引用了一个扩展,该扩展允许将register变量固定到特定的硬件寄存器。如果您发布此类错误消息,还请说明您正在使用哪个编译器和/或平台。