寄存器的访问速度比内存快,因此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