C语言-关键字1

auto

变量的作用域:

  • 变量可以作用的范围。一般都是花括号里面。

变量的生命周期:

  • 变量从被创建到销毁所经历的时间。

可以认为局部变量都默认是auto的,但是你不写编译器也知道。该关键字几乎不用了。

register

当你使用register去修饰一个变量时,编译器会尽可能将该变量放在CPU的寄存器中而非内存中,所以CPU访问该变量的速度是很快的。
几点注意:

  • 1,register修饰的最好是局部变量。因为全局变量会一直占用寄存器。
  • 2,不会被写入。写入就要写回内存。那么该变量设为register就没有意义。
  • 最好是高频读写的。
  • 无法被&符号取地址。
  • 不要被大量使用,因为寄存器有限。

为什么要有头文件

很多时候我们有这样的需求:在一个源文件中使用另一个源文件的函数或者变量。那么能不能直接使用呢?

  • 函数可以,但是会警告,函数只要链接找到就可以。(只限于自己写的函数,想要使用库函数或者别的函数必须包含声明)。
  • 而变量必须声明过才可以使用,且不能在声明的时候赋值。因为声明不开辟空间。

但是如果我有100个源文件,每个源文件都要使用同一个全局变量,那么怎么办呢?我难道要写100遍声明吗?

所以,一个好的处理方法就是,将这些声明提取到1个共用的文件中,以便于项目的维护。而这个文件就是头文件。而每个想要使用其中变量或者函数的源文件,只需要包含该头文件即可。

  • 头文件包含的内容:
    头文件包含

static

我们知道了全局变量和函数是可以跨文件的。而函数甚至不用声明就可以使用。那么有没有办法保证你的函数无法直接被其他源文件使用呢?

  • static修饰全局变量,表示该变量只能在源文件内部使用。改变了该变量的作用域。但是可以间接使用。
  • static修饰函数,表示该函数只能在该源文件内部使用。但是可以嵌套式的间接使用。
  • static的特性为C语言提供了封装性的可能。保证了项目的安全性。
/************* test.c文件 ***************/
static int g_val = 100;  //g_val无法被外部文件直接访问。因为static
int show_val() {
	printf("%d\n", g_val); //但是可以通过show函数访问;因为show函数可以被其他源文件访问
}

static void test(){ //被static修饰,无法被外部直接访问
 // do something...
}
void show_test(){
	test(); //但是可以通过嵌套,间接访问
}
  • static修饰局部变量,该变量的生命周期

extern

  • 在变量前面,表示声明该变量。全局变量声明必须带上extern,否则就可能引起编译器的二义性。不带上无法分辨是定义还是声明。
  • 函数可以不带,因为编译器可以分辨出函数的定义和声明,但是为了保持好习惯,建议带上。
    extern
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值