c语言:几种常用的关键字

const

const 是 constant 的缩写,意思是“恒定不变的”,那么用const修饰的变量就是永恒不变的,不管是常数还是指针。const修饰的变量叫做常变量,有常量无法更改的属性,也有变量的基本属性,比如类型、占用存储单元;相当于有名字的常量(写代码时使用的常量的意义更加明确,代码更有可读性),有宏定义的特点(可以代替define)

相比define的优点:const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”

用 const 修饰的变量,是全局变量,生存周期已经是程序运行的整个过程。局部变量生存周期也是程序的整个过程,局部变量有了静态属性。

用人话讲:const就是把变量变成常量,用这个常量的时候就可以用这个变量名来代替;

extern

extern 意思是"外面的,外来的"。修饰变量说明这个变量是外面来的,即来自其他文件,而不是这个文件内的(外部变量声明)。只能定义全局性质的(全局变量和函数),要是局部的,这个程序内就没有了也就提不上到其他文件内了。
1、函数内使用前面未定义的全局变量。用extern声明就可以使用,表示定义在后面;
2、其他文件要有某个文件的全局变量,用extern声明,表明该全局变量的定义的其他文件;

注意:由于用 extern 引用外部变量,可以在引用的模块内修改其变量的值,因此,如果有多个文件同时要对应用的变量进行操作,而且可能会修改该变量,那就会影响其他模块的使用。因此,我们要慎重使用。

用人话讲:用外面定义的全局变量,就要先用extern声明;

static

static 意思是"静态的,静止的"的意思。
1、定义函数内的局部变量时
定义局部变量后,局部变量就具有全局变量属性。比如生存周期已经是程序运行的整个过程。不会随着调用函数的结束而结束、内存直到程序结束再释放;、未赋初值自动赋为0;

2、定义函数外的全局变量
普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。

静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。

3、定义函数
函数和全局变量类似,用static定义函数,也和static定义全局变量后的作用一致。静态函数只能在声明它的文件中可见,其他文件不能引用该函数;不同的文件可以使用相同名字的静态函数,互不影响。

注意:全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开头处的指针。而全局变量是在函数外部声明的变量。函数名也在函数外,因此函数也是全局的。

再注意:定义全局属性的变量或函数,可以将原先的external属性变成internal(链接属性只能修改一次,变成internal就不能变回external了)(保护一个全局变量不被其他文件访问

用人话讲:静态的static把局部的变成全局的,全局的变成这个文件内的;

auto

一般局部变量变量默认的类型;(局部变量屏蔽全局变量,代码更清晰)

#include<stdio.h>

void main(){
	int a=0,i;
	for(i=0;i<3;i++){
		printf("a=%d",a);
		a++;
		{
			auto int b=0;
			printf("b=%d\n",b);
			b++;
		}
	}
}

运行结果:
a=0b=0
a=1b=0
a=2b=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值