编译预处理指令
- #开头的是编译预处理指令
- 在编译之前就处理了
- 在#include处将头文件里面的所有东西替换这个#include语句
- 他们不是c语言的成分,但是C语言离不开他们
- 条件编译(保证这个头文件只会被#include一次)
#ifndef _LIST_HEAD_ #define _LIST_HEAD_ #include "node.h" typedef struct _list{ Node *head; Node *tail; }List; #endif - error等
- #define用来定义一个宏
- #define <名字> <值>
- 他们不是c语言的语句,所以不用加;(如果加了';'会导致将';'也一并替换下去)
- 名字必须是一个单词,值可以是任何东西
- 在编译之前,编译预处理程序会将程序里面里的名字换成值
- 完全的文本替换
- 预定义的宏
- LINE
- FILE
- DATE
- TIME
- STDC
- 像函数的宏
- #define cube(x) ((x)(x)(x))
- 宏可以带参数
- 整个值要括号
- 参数出现的每个地方都要有括号
- 部分宏会被inline函数替代
- 声明和定义
- 声明是不产生代码的(只有声明可以被放在头文件中)
- 函数原型
- 变量声明
- 结构声明
- 宏声明
- 枚举声明
- 类型声明
- inline函数
- 定义是产生代码的
- 函数定义
- 全局变量定义
- 声明是不产生代码的(只有声明可以被放在头文件中)