一、预处理指令:在将代码翻译成01之前执行的命令
1.预处理指令都是以#开头
2.预处理指令位置可以随便写
3.预处理指令的作用域,从编写指令的那一行到文件结束
4.预处理指令包括3种:
4.1 宏定义: 只是将代码替换,并不会计算
无参数的宏定义:#define 宏名(大写) 值:将宏名替换成值
带参数的宏定义:#define 宏名(参数) (参数) 文本替换
注意:带参数的宏定义要将参数和结果都加上括号
#undef 宏名 结束宏定义
4.2条件编译:有条件的编译代码,一般参与判断的是宏
#if
#elif
#else
#endif 如果endif不加,else后面的代码全部不被编译,包括大括号
#if defined A 等价于 #ifdef A 如果定义了宏A
#if !denfined A 等价于 #ifndef A 如果没有定义宏A
4.3文件包含
#include <系统自带> "自定义"
防止重复的包含复制:
#ifndef XXX_H 宏名为头文件的文件名
#define XXX_H
函数声明
。。。。
。。。。
#endif
二、typedef :给类型取新的类型名称,一般用于比较复杂的类型名,比如结构体,枚举类型,指针类型
typedef struct Person
{
int age;
} Sperson; 定义了一个结构体类型Person,并且取新名称
Sperson。
typedef enum sex
{
男,女
} Msex; 定义了一个枚举类型sex,取新名称为Msex
三、extern和static:
针对函数:
extern定义和声明外部函数:默认都是外部函数,所以可以省略,同一个项目,不同文件的函数不可重名
static定义和声明内部函数:不能直接调用,不能省略。不同文件的内部函数可以重名
针对变量:
全局变量:
1.外部变量:全局变量默认都是外部变量,不同文件重复定义一个重名的变量都是同一个变量。
2.内部变量:只能本文件中访问,不同文件的同名变量,不是同一个变量
extern:声明一个外部变量,不可省略
static:定义一个内部变量
局部变量:
static修饰局部变量唯一的作用就是改变局部变量的生命周期,直到程序结束才会被释放。但是不会改变局部变量的作用域。如果函数内部的局部变量,那么调用这个函数N次,所有调用的函数都共享这个变量。
四、递归:函数自己调用自己,必须有一个明确的返回值