📜  了解C语言中的“ register”关键字

📅  最后修改于: 2021-05-26 01:10:31             🧑  作者: Mango

寄存器比内存访问要快,因此可以使用register关键字将C程序中最常用的变量放入寄存器中。关键字register会向编译器提示可以将给定的变量放入寄存器中。编译器可以选择是否将其保存在寄存器中。通常,编译器自己进行优化,然后将变量放入寄存器中。

1)如果对寄存器变量使用&运算符,则编译器可能会给出错误或警告(取决于您使用的编译器),因为当我们说变量是寄存器时,它可能存储在寄存器中而不是内存中,并且寄存器的访问地址无效。请尝试以下程序。

#include
  
  
int main()
{
    register int i = 10;
    int* a = &i;
    printf("%d", *a);
    getchar();
    return 0;
}

2) register关键字可以与指针变量一起使用。显然,寄存器可以具有存储位置的地址。以下程序不会有任何问题。

#include
  
int main()
{
    int i = 10;
    register int* a = &i;
    printf("%d", *a);
    getchar();
    return 0;
}

3)寄存器是一个存储类,并且C不允许变量使用多个存储类说明符。因此, register不能与static一起使用。请尝试以下程序。

#include
  
int main()
{
    int i = 10;
    register static int* a = &i;
    printf("%d", *a);
    getchar();
    return 0;
}

4)寄存器只能在一个块内使用(局部),而不能在全局范围内(在主外部)使用。

#include 
  
// error (global scope)
register int x = 10;
int main()
{
    // works (inside a block)
    register int i = 10;
    printf("%d\n", i);
    printf("%d", x);
    return 0;
}

编译错误:

prog.c:3:14: error: register name not specified for 'x'
 register int x = 10;//error (global scope)
              ^

5)C程序中对寄存器变量的数量没有限制,但重点是编译器可能会将某些变量放入寄存器中,而有些则不会。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。