寄存器比存储器访问要快, 因此可以使用以下命令将C程序中最常用的变量放入寄存器中寄存器关键词。关键字寄存器向编译器提示可以将给定变量放入寄存器中。编译器可以选择是否将其保存在寄存器中。通常, 编译器自己进行优化, 然后将变量放入寄存器中。
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)Register是一个存储类别, C不允许变量使用多个存储类别说明符。所以, 寄存器不能与static。请尝试以下程序。
#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\n" , i);
printf ( "%d" , x);
return 0;
}
【如何理解C语言中的register关键字()】编译错误:
prog.c:3:14: error: register name not specified for 'x' register int x = 10;
//error (global scope)^
5)C程序中对寄存器变量的数量没有限制, 但重点是编译器可能会将某些变量放入寄存器中, 而有些则不会。
如果你发现上述文章中有任何不正确之处, 或者你想分享有关register关键字的更多信息, 请发表评论。
推荐阅读
- C#栈Stack如何使用(代码示例指南)
- materialize CSS如何实现下拉菜单()
- 找到一个元素,它前面的所有元素都比它小,后面的所有元素都比它大
- 算法设计(最小正方形可均匀切割矩形)
- OOP编程(C#数据抽象详细指南)
- 软件工程|迭代瀑布模型介绍
- HTML如何使用块和内联元素()
- 如何理解Java主线程(详细指南)
- Python如何处理异常和错误()