在C语言中,我们会学到一些内置的关键字,这些关键字在c语言中具有特殊意义,尽量不用来做变量名
下面我们来介绍一下C语言中32个关键字,着重介绍3个重要的关键字,让我们一起来了解下他们吧!
c语言中一共具有32个关键字:
关键字 typedef
typedef unsigned int ui;//用关键字typedef 将原来复杂的类型名换为简单的ui
int main()
{
//num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
ui num2 = 0;
return 0; }
通常情况下typedef都是配合函数,结构体等复杂结构使用
注意:不能滥用typedef,写程序的初衷是将复杂的问题简单化,而不是将简单的问题复杂化
关键字 static
关键字static有三个修饰的对象:局部变量,全局变量,函数
static修饰局部变量
#include <stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();//打印结果为十个 1
}
return 0; }
以上代码我们不难发现,当定义一个局部变量并在局部对其操作时,由于局部变量的临时性,当该变量进入代码被定义块开辟空间,当该变量退出代码块时被销毁释放空间,所以上面的代码每重新调运一次test函数,i都会被重新定义一次,所以每次都是从0自增到1
#include <stdio.h>
void test()
{
//static修饰局部变量
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();//从1到10
}
return 0; }
那么我们给局部变量i添加一个static关键字呢?
不难发现,输出结果就变成了从1到10;完成了10次自增,对于这个程序,我们可以理解为,当这个函数被调用完了,在static的修饰下局部变量i并没有被释放掉,事实上是static关键字修饰局部变量,将该局部变量的生命周期改为全局!(所以i的定义只有最初的1次,之后的调用都是调用定义过的,而不是像原来一样重新定义),值得注意的是,但是其作用域不改变!
static修饰全局变量
static也可以用于修饰全局变量,首先问哦们来明确一下全局变量的含义,全局变量指的是此变量在整个程序中(不是单一源文件)都有作用效果,只不过在其他文件想要使用时需要对其进行声明
而我们的static修饰全局变量起到的效果就是,将原来作用域是整个文件的全局变量的作用域变为单一源文件(指只在定义那个变量的源文件中才可以使用)
//add.c
int g_val = 2018;//在add.c中定义变量g_val
//test.c
int main()
{
printf("%d\n", g_val);//在test.c中可以进行访问
return 0; }
//代码2
//add.c
static int g_val = 2018;//在add.c中定义的static修饰的变量
//test.c
int main()
{
printf("%d\n", g_val);//在test.c中无法被访问到
return 0; }
总结起来就是:static修饰全局变量意味着该变量只在本文件内被使用
static修饰函数
函数可以在别的源文件中定义,在main函数中进行调用,虽然不需要声明也可以对函数进行调用,但是这并不是好的编码习惯,建议将在别的源文件中定义的函数在本文件中用extern+函数的返回值+函数得函数名+函数的形参列表(除去函数体的其他部分)进行声明,总结:函数在一个文件中被定义,在其他文件中可以直接调用,这是c语言多文件编程的基础
而利用static修饰函数则代表该函数只在本文件内有效
//add.c
int Add(int x, int y) {//在add.c中进行函数的定义
return c+y;
}
//test.c
int main()
{
printf("%d\n", Add(2, 3));//在test.c中进行函数的调用
return 0; }
//代码2
//add.c
static int Add(int x, int y) {//在add.c中进行函数的static修饰
return c+y; }
//test.c
int main()
{
printf("%d\n", Add(2, 3));//在test.c中则无法进行使用,只在add.c中有效
return 0; }
extern关键字
extern关键字的作用是指对于变量或者函数的声明,首先我们先来明确两组概念,定义与声明,定义的本质是指在内存中开辟对应数据类型的空间大小去定义这个变量,定义的关键是要在内存中开辟空间,而声明则是在文件中用extern+数据类型+数据名称的形式来对已定义的变量或者函数进行一种“广而告之”的声明,其在程序中并不会进行新的空间开辟,所以在声明时无法对变量进行赋值,变量或函数只会被定义一次,而声明则可以有无数次