014-预处理指令-C语言笔记

014-预处理指令-C语言笔记

学习目标

1.【掌握】枚举程序员

2.【掌握】typedef关键字web

3.【理解】预处理指令ide

4.【掌握】#define宏定义函数

5.【掌握】条件编译学习

6.【掌握】static与extern关键字spa

1、枚举

当咱们要描述方向、四季、性别、学历、婚配状况等等事物的时候,咱们知道这些事物的取值范围是很是有限的。好比,性别取值就男、女,四季取值就春、夏、秋、冬。相似这样的需求,C语言提供了一种构造类型枚举专门针对此类需求,由程序员本身声明一种新的数据类型,并给这个新的数据类型声明几个固定枚举值。同时,声明这个新的数据类型的变量时,给变量赋值的取值范围就只能赋值咱们类型里声明的某个固定枚举值。指针

枚举类型的声明code

语法:enum 枚举名 {枚举值1,枚举值2,...};blog

枚举变量的声明ci

语法:enum 枚举名 变量名;

变量的初始化

语法:enum 枚举名 变量名 = 枚举值;

枚举值对应的整型数值

注意:

1.枚举也是一种数据类型,类型名是(enum 枚举名),必需要加上enum关键字啊。

2.给枚举变量初始化或者赋值的时候,取值只能取枚举类型的枚举值中的某个值,不能随意赋值。

3.每个枚举值对应都有一个整型数值的,从第一个枚举值开始从0依次递增。

4.声明一个枚举变量的时候,这个变量里面存的其实是这个枚举值对应的整型,而不是枚举值自己。

5.枚举值命名最好能加上区分这个枚举值属于哪一个枚举类型的标示,好比在枚举值前面加上枚举类型名。

实际应用:

 

2、typedef关键字

若是你感受有些数据类型太长,难以记忆难以书写,咱们可使用typedef关键字为各类数据类型定义一个新名字(别名)。

语法:typedef 数据类型 别名;

typedef与普通数据类型

typedef与指针

typedef与结构体

typedef与指向结构体的指针

typedef与枚举

typedef与指向函数的指针

 

3、预处理指令

让咱们来回顾一下C程序从编写源代码到执行须要的步骤。先编写符合C语言语法规范的源代码文件,而后编译成二进制代码的目标文件,再而后会进行连接,最终生成可执行文件。其实在编译以前,还有一个很重要的步骤,系统会自动执行,那就是执行预处理指令。预处理指令是在编译以前执行的,咱们已经学过#include文件包含指令,今天咱们再来整几发指令。

4、#define宏定义

在程序编译以前,会把使用宏名的地方替换成宏值的内容。注意这里的替换是纯洁的替换,不管宏值是表达式仍是数值,甚至是错误代码,都会原模原样的替换。

语法:#define 宏名 宏值

无参数的宏:使用无参数宏的时候,只是纯粹的文本替换

有参数的宏:使用有参数宏的时候,须要调用宏的人传入一个值做为宏值的一部分

注意:

1.当宏值是一个表达式,宏值的语法错误不会报错,由于检查语法是在编译的时候干的。

2.当宏值是一个表达式,替换宏名也是替换源代码中使用宏名的地方,因此特别注意替换后的运算符优先级问题。

3.宏值当中若是有变量,使用宏值以前必需要先声明这个变量。

4.若是双引号中出现了宏名,其实这个不是宏名,只是和宏名很像的字符串。

5.宏能够定义在任何地方,能被使用的做用域是从定义开始到文件结束。

5、条件编译

20136256945

在不少状况下,咱们但愿程序的其中一部分代码只有在知足必定条件时才进行编译,不然不参与编译,这就是条件编译。

语法:

执行顺序:若是条件1知足,则代码1参与编译。若是条件1不知足,条件2知足,则代码2参与编译。若是条件1和条件2都不知足,则执行代码3。

第一种状况,判断宏值是否知足条件

第二种状况,判断一个宏有被定义

第三种状况,判断一个宏没有被定义

注意:

1.条件编译必定要使用宏进行条件判断,不能使用变量,由于变量的值是在程序执行的时候才赋值的。

2.#endif表示这个条件编译结束,必定不能少,否则会发生一些不可预料的事情。

3.条件编译只会编译符合条件的那一个分支编译成二进制代码。

6、static与extern关键字

static与函数

若是一个函数被static关键字修饰,只能在当前模块中使用,就至关于内部函数咯。

extern与函数

若是一个函数被extern关键字修饰,能够在当前模块中使用,也能被其余模块共享,不过默认函数就是被extern修饰的,能够省略不写。

static与变量

被static修饰的局部变量会声明在常量区中,函数执行完毕后不会被释放,只有程序执行结束才会释放。

被static关键字修饰的全局变量只能在当前模块中使用,不能被其余模块共享,至关于私有全局变量。

main.c文件

test.h文件

test.c文件

extern与变量

extern不能修饰局部变量,被extern修饰的全局变量能够在当前模块中使用,也能被其余模块共享。不过默认全局变量就是extern修饰的,因此咱们能够省略(Xcode6.3前是默认加extern的,Xcode6.3后必须本身在声明里加上extern,但定义的地方能够不写)。

main.c文件

test.h文件

test.c文件

相关文章
相关标签/搜索