预处理指令 分3种
1:宏定义
2:条件编译
3:文件包含
预处理指令是在代码翻译成0跟1之前执行的
所有的预处理指令都是以#号开头的
源文件-->预处理-->汇编-->二进制-->链接(可执行文件)-->运行
1:宏定义
#define 宏名 值
定义一个没有参数的宏
在代码翻译成0跟1之前,把所有的宏名替换为值(宏定义只做一个单纯的替换操作)
注意: 宏名和值之间要用空格隔开
宏定义后面不需要写分号
如果把宏名写在双引号中在代码翻译成0跟1之前不会进行替换
一般宏名都大写,为了和局部变量区分开来
宏名除了用大写 还可以用k开头
宏定义的作用域:
从定义的那一行开始一直到文件结束
可以使用#undef来提前结束宏定义的作用域
带参数的宏
写带参数的宏定义一般会给每一个参数都加上括号同时还要给整体也加上大括号
2:条件编译
条件编译的格式:
当条件满足的时候就会编译和下一个条件之间的的代码,其他的都不会参与编译
#if 10 == A
printf("10\n");
#elif 5 == A
printf("5\n");
#else
printf("other\n");
#endif
注意点: 在编写条件编译的时候一定要在后面加上 #endif
#endif 的作用是告诉条件编译什么时候结束
外部函数:定义的函数能被本文件和其它文件访问
1 默认情况下所有的函数都是外部函数
2 在不同文件中不能有相同名称的外部函数
extern的作用:
1 完整的定义一个外部函数
2 完整的声明一个外部函数
内部函数:定义的函数只能被本文件访问
1 不同文件中可以有相同名称的内部函数
static的作用:
1 定义一个内部函数
2 声明一个内部函数
static和extern对全局变量的作用
全局变量分为2种:
1.外部全局变量
在本文件和其它文件中都可以访问的全局变量称之为外部全局变量
不同文件中的外部全局变量代表着同一块存储空间
所有同名的全局变量都代表着同一块存储空间
2.内部全局变量
只能在本文件中访问的全局变量称之为内部全局变量
extern对全局变量的作用:
用来"声明"一个外部全局变量
static对全局变量的作用:
用来定义一个外部全局变量
tepedef的作用:给现有的数据类型起一个别名
有利于加强数据类型的描述性, 提高了代码的可读性
提高了程序的可扩展性, 移植性
减少了代码的书写工作量, 简化了代码
注意点:
typedef 仅仅是给原有的数据类型起了一个别名,并不是创建一个新的数据类型
typedef不仅可以写在函数外面还可以写在函数里面,只要在使用别名之前定义就可以