从零开始的预处理指令

预处理指令

程序员所编写的代码不是标准的C代码,需要一段程序把它翻译成标准的C代码才能进行编译,负责翻译的程序叫预处理器,翻译的过程叫预处理,被翻译的代码叫预处理指令(以#开头)。
查找预处理的结果:
gcc -E code.c 会把预处理的结果显示在屏幕上
gcc -E code.c -o code.i 把预处理的结果保存到文件中。
常见预处理指令:
#include 把头文件导入到源文件中
#include <> 从系统指定的位置查找头文件导入。
#include “” 从系统指定的位置查找,如果没有再从系统指定的位置查找,并导入。
#if/#endif 条件编译 可以使用它来注意大段的代码。
// 只能注释一行
/* / 可以注释多行,但不能嵌套
#define 用来定义宏
#define 宏名 宏扩展
如果在代码使用了宏名,预处理时就会把宏名替换成宏扩展,常用于定义宏常量。
可以把一个很长的标识符用一个简短的宏替代。
标准库中预定义了一些供我们使用:
func 获取当前函数名
FUNCTION 同上
LINE 获取当前行号
DATE 获取当前日期
TIME 获取当前时间
typedef int
intp,#define intp int*,它们有什么区别?

#define 也可以用来定义宏函数,也就带参的宏。
宏函数不是真正的函数,它不会进行参数的类型检查,没有返回值,所谓的返回值只是表达式的运算结果。
使用宏函数的好处:不进行参数类型检查(不安全)什么类型的参数都可以使用(通用),速度快(没有进行栈和出栈,即没有进行传参)。
使用宏函数的坏处:不安全,过多使用把代码增加,造成冗余。
定义宏函数时要注意的问题:
1、不能加分号
2、可能会造成二义性,要尽量多加小括号。

#define SUM(n1,n2) n1+n2
SUM(num1,num2) =》 num1+num2
定义宏时不能换,必须在一行内搞定,如果宏扩展实在太长,可以使用续行符’'换行。
如果宏扩展有多行语句,可以使用大括号保护。

你可能感兴趣的:(从零开始的预处理指令)