C语言关键字——auto、register、static

发布时间:2023-02-06 15:00

1.auto

在解释 auto 之前,先来了解一下什么是局部变量

在很多印象中,对局部变量的描述是:函数内定义的变量称为局部变量。并且下面这段代码也很好的解释了这句话:

#include 

void print()
{
	int a = 10;
	printf("%d", a);
}
int main()
{
	print();
	printf("%d", a);
	return 0;
}

显然这段代码是错的,编译器也会报错:

但事实上 “函数内部定义的变量是局部变量” 这种说法是不错的,但是不准确。我们来看这样一段代码:

#include 
int main()
{
	int func = 10;
	if (func)
	{
		int num = 1;
	}
	printf("%d", num);
	return 0;
}

同样编译器也会报错:

C语言关键字——auto、register、static_第1张图片

所以正确的理解应该是:在 { } 中定义的变量叫做局部变量。

那么我们顺水推舟提一个问题:局部变量与我们的关键字 auto 有什么联系?

其实在早期的C语言中,局部变量是需要用 auto 修饰的,但现在的编译器发展越来越智能,会自动识别哪个变量是局部变量。所以,现在对于局部变量的 auto 关键字都是省略的。

我们可用这段代码证明:

#include 
void print()
{
	auto int a = 10;
	printf("%d\n", a);
}
int main()
{
	int a = 10;
	printf("%d\n", a);
	print();
	return 0;
}

C语言关键字——auto、register、static_第2张图片

所以对于 auto 这个关键字来说,只需了解、知道就好。

2.register

千万不能把这个单词翻译成:登记、注册!正确的翻译应该是:寄存器。

那寄存器是什么? 寄存器是计算机 CPU 的一组硬件,存在的本质是提高计算机的运行效率,因为寄存器不需要从内存中拿数据也就是说把数据直接放在寄存器,直接供 CPU 计算,从而提升运行效率

所以我们大胆猜测:register 修饰的变量,意义在于尽量把修饰的变量放入 CPU 寄存器中

那么什么样的变量适合用 register 来修饰呢?

  • 局部变量(全局变量会长时间占用寄存器)
  • 不会被写入的变量(因为一旦写入将会写回内存,register 就没有意义了)
  • 被高频使用的变量

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号