C预处理

C语言支持预处理指令。预处理在编译前运行,能够控制源代码。

#include

include指令用于引入头文件。

#include<文件名>。从引入目录开始查找引入,用于引入标准头文件。 #include"文件名"。从项目目录查找引入,用于引入用户编写头文件。

#define

define预处理指令用于定义宏和函数。 define定义不是C代码,不需要;结尾。

定义宏

使用define可以定义宏。

配合#if #ifdef #ifudef #endif可以实现条件编译,按照不同的宏定义编译不同代码。

防止重复引入

#ifndef _MY_HEADER_H
#define _MY_HEADER_H

//这里放入代码

#endif

定义宏常量

可以使用define定义宏常量。

#define PI 3.14159265

double r = 20;
double area = r * r * PI;

define定义的常量没有任何类型信息,在预处理时做的是替换。

编译器也会定义一些宏,这些预定义宏便于调试。

名称 作用
LINE 当前行
FILE 当前源文件

定义宏函数

#define mutilpy(a,b) ((a)*(b))

double v = mutilpy(3,4);

define定义的函数没有类型信息,在预处理时会展开。

为了保证符合运算符优先级,所有参数以及整体都需要加上括号,以防展开后得到错误表达式。

如果宏函数有多行,可以在每一行结尾添加反斜杠\

宏代码中可以使用#链接变量名和字符串。

#if #ifdef #ifudef #endif #else #elif

条件编译。条件编译可以实现很多功能,比如设置不同的宏编译不同版本程序。

#pragma

编译器命令。

#pragme once

防止重复引入文件。需要编译器支持。

#pragma pack(n)

设置结构体的字节对齐。