C语言提供了多种编译预处理功能,其中主要的有宏定义、文件包含、条件编译。

在C语言中,凡是以“#”开头的行,都称为“编译预处理”命令行。如:#include,#define

伪指令(或预处理指令)定义:


预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:
指令 用途
# 空指令,无任何效果
#include 包含一个源代码文件
#define定义宏
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码,其实就是else if的简写
#endif结束一个#if……#else条件编译块
#error停止编译并显示错误信息
1.宏定义
宏定义 又称宏展开,宏替换。宏定义分有参数和无参数两种。
Eg: #define PI   3.14  //无参数型
#defineV(R)   R*R*R   //有参数型

2.文件包含
(1)eg:#include <area.h> 在编译时,将area.h的内容引入程序中插入该命令行位置取代该命令行。
(2)#include "文件名" 与#include <文件名> 区别
#include "文件名" :系统先在当前目录中搜索被包含的文件,若没有找到,再到系统指定的目录搜索;
#include <文件名> :系统直接到指定的路径搜索。
(3)被包含的文件的类型 :通常是以".h"为后缀的头文件(或称“标题文件”)和以".c"为后缀的源程序文件。既可以是系统提供的,也可以是用户自己编写的。
3.条件编译
#ifdef 标识符
程序段1
#else
程序段2
#endif

它的作用是,当标识符已经被定义过(一般用#define定义),则对程序段1进行编译,否则编译程序段2.