------- ios培训、 android培训、java培训、期待与您交流! ----------
一.编译预处理指令
源代码 -> 编译预处理 -> 编译 -> 链接 -> 运行
编译预处理指令:在编译前进行解析处理的指令
特点:所有编译预处理指令都以#开头
所有编译预处理指令都不加分号
二.宏定义
1.不带参数的宏定义: #define 宏名 值
(1)在预编译的时候所出现宏名标识的地方都会被替换成宏名后面的值
注意点:注释中的宏名不会被替换
在字符串中出现的宏名不会被替换
(2)宏名的命名规范: 全部大写,有多个单词使用下划线隔开
2.带参数的宏定义: #define 宏名(参数列表)表达式
(1)参数列表中的参数代入表达式中,然后替换出现宏名的地方
注意点:参数列表中没有数据类型
宏名与括号之间一定不要加空格
(2)带参数的宏定义与函数的区别:
函数有调用过程,会开辟存储空间,花销比较大
宏仅仅是一个替换的操作
(3)取消定义某个宏 #undef
自己的理解:
1.做题的时候,要记住宏仅仅是一个替换操作
2.自己定义宏的时候,所有出现参数以及运算结果的地方都加上括号
3.不要在参数中使用自增自减和复合赋值运算符
三.条件编译:在编译的时候,条件满足就编译某段代码
1.格式: #if开头 #elif #else #endif结尾
特点:(1)条件编译中的条件只能由宏定义和常量组成,不能出现变量
(2)在编译的时候进行判断
使用场景:
1. #indef 宏名
//如果定义了某个宏就执行这里的语句
#endif
2. #ifndef
//如果没有定义某个宏就执行这里的语句
#endif
四.static与extern
1.对局部变量的作用
static:(1)延长变量的生命周期:从第一次执行开始直到文件退出
(2)定义的这一行代码仅仅执行一次
(3)不会改变变量的作用域
extern:放在函数内部,仅仅是对全局变量的声明
2.对全局变量的作用
内部变量:仅能在本文件中访问的变量
外部变量:可以再所有文件中被访问的变量
static:声明或定义一个内部变量
extern:声明或定义一个外部变量
3.对函数的作用
内部函数:仅能在本文件中使用的函数
外部函数:可以在其他文件使用的函数,默认所有函数都是外部函数
static:声明或定义一个内部函数
extern:完整声明或定义一个外部函数