C语言的编译预处理命令主要包括:宏定义、文件包含和条件编译。预处理命令均以“#”开始,命令的结尾没有分号,每条预处理命令必须占用单独一行。
1.宏定义
(1) 无参宏定义
无参宏定义的一般形式如下:
#define 宏名 字符序列
如果源程序中使用了宏定义,编译预处理过程中,自动把源程序中出现的所有“宏名”替换为“字符序列”,这是一个纯文本替换,也称为宏替换。
例如下面定义了3个无参宏名:
#define PI 3.14
#define R 10
#define AREA PIRR
(2) 有参宏定义
有参宏定义的一般形式如下:
#define 宏名(参数表) 字符序列
有参宏定义在进行宏替换时,源程序出现宏名的地方都使用字符序列替换,替换时使用宏引用中的实参去替换宏定义中的形参。
例如,如下定义了一个有参的宏名。
#define MUL(a,b) (a)*(b)
源程序中可以使用如下语句使用有参的宏:
int x=3, y=4, z;
z=MUL(x,y);
注意:通常需要在有参宏定义时,字符序列中参数要加上圆括号,以免进行宏替换时出现错误,如z=MUL(x+3,y-1)10,进行宏替换后的语句为:z=x+3y-1*10;。
2、文件包含
文件包含也是一种编译预处理命令,其作用是把被包含的文件的内容全部引入到使用文件包含命令的源程序文件中。文件包含命令有以下2种形式:
#include <文件名> 或 #include “文件名”
文件包含命令使用尖括号形式时,编译器在系统默认的路径中寻找被包含文件;使用双引用形式时,编译器先在用户程序的当前工作目录中寻找被包含文件,如果找不到文件,再去系统默认的路径中寻找文件。
下面是几个文件包含命令的例子:
#include <stdio.h> //包含系统预定义的头文件
#include “user.h” //包含自定义的头文件
#include “func.c” //包含自定义的源程序文件
3、条件编译
通常情况下,源程序文件中的所有语句行都需要参与编译,并生成到目标文件中。如果源程序需要根据特定的条件决定一部分源代码是否参加编译,则需要使用条件编译预处理命令。
C语言的条件编译预处理指令主要有三种形式。
1、#if指令
一般形式:
#if 表达式
程序段1
#else
程序段2
#endif
2、#ifdef指令
一般形式:
#ifdef 宏名
程序段1
#else
程序段2
#endif
3、#ifndef指令
一般形式:
#ifndef 宏名
程序段1
#else
程序段2
#endif
来源:CSDN
作者:it_xiangqiang
链接:https://blog.csdn.net/it_xiangqiang/article/details/104344257