c - 寄存器存储类的范围是什么?

标签 c linux gcc

我想知道每个存储类之间到底有什么区别。这里我使用了注册存储类。所以我很困惑,如果我们将 register 变量声明为全局变量,它的范围是什么? 在我的代码中,它给出了未为“x”指定的寄存器名称。如果有人知道它到底在说什么,以及与其他存储类相比,寄存器变量的范围是什么,请指导我? 谢谢。!!!

 below is the output of terminal using gcc compiler in Ubuntu.

 shilpi@shilpi:~/storageclass$ gcc register.c
 register.c:9:15: error: register name not specified for ‘x’
 register int x=10;
           ^
 shilpi@shilpi:~/storageclass$ gcc register.c
 register.c:9:15: error: register name not specified for ‘x’
 register int x=10;
           ^



//int x = 10 ;
int z;
int main( )
{
   extern int y ;
  // register int x ;
   printf ( "The value of x is %d \n", x ) ;
   printf ( "The value of y is %d",y ) ;
   z=add();
   printf("\nvalue of sum is : %d", z);
   return 0;

}
int y = 200 ;

int add()
{
    int sum;
    sum=x+y;
    //printf("value of sum is : %d", sum);
}

最佳答案

在标准 C 中,register 只允许在函数内部使用,然后是从其声明到该声明发生的 block 末尾的可见范围这样的变量。

因为这样的 register 与您平台的硬件寄存器没有太大关系,所以它用词不当。它的目的是一个优化提示:你不能取这样一个变量的地址。

Gcc 有一个扩展,也允许将这样的 register 变量关联到真实的硬件寄存器。该扩展名也可以在文件范围内使用,这是您看到的错误消息。

关于c - 寄存器存储类的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26039118/

相关文章:

c - 为什么函数指针有 12 个字节长?

c++ - 编译时是否有 header 标识 SunOS/Solaris 版本?

linux - 在 shell 脚本中查找

linux - 在 UNIX 类型的操作系统中获取当前用户帐户的显示名称

c++ - 简单的 netbeans C++ 项目无法编译

c - linux c client - 添加发送数据的能力

C - 从文本文件打印特定行

Linux Kernel - 我可以在不同的函数中锁定和解锁自旋锁吗?

C系统函数返回sh : Invoke-Item command not found

c++ - 在头文件中包含一个巨大的 Vector