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

寄存器的访问速度比内存快,因此C程序中最常用的变量可以使用 登记 关键词。关键词 登记 提示编译器可以将给定变量放入寄存器。编译器可以选择是否将其放入寄存器。通常,编译器自己进行优化,并将变量放入寄存器中。

null

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

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


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

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


3) 寄存器是一个存储类,C不允许一个变量有多个存储类说明符。所以 登记 不能用于 静止的 .试试下面的程序。

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


4) 寄存器只能在块(本地)内使用,不能在 全球的 范围(主管道外)。

#include <stdio.h>
// error (global scope)
register int x = 10;
int main()
{
// works (inside a block)
register int i = 10;
printf ( "%d" , 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程序中,寄存器变量的数量没有限制,但问题是编译器可能会将一些变量放入寄存器,而将一些变量放入寄存器。

如果你在上面的文章中发现任何不正确的地方,或者你想分享关于register关键字的更多信息,请写评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享