条件编译
条件编译的功能使得我们可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件
条件编译的3种形式:
1、#ifdef标识符
程序段1
#else
程序段2
#endif
功能为:如果标识符已被#define命令定义过,则对程序段1进行编译,否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以省略。
2、
#ifndef 标识符
程序段1
#else
程序段2
#endif
与第一种形式的区别是将ifdef改为ifndef。
它的功能是:如果标识符未被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。这与第一种形式的功能正好相反。
3、
#if常量表达式
程序段1
#else
程序段2
#endif
它的功能是:如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译,因此可以使程序在不同的条件下,完成不同的功能。
至于#elif命令,意义与else……if相同,它形成一个if else-if阶梯状语句,可进行多种编译选择
规则:所有的#else、#elif和#endif预处理指令应该同它们相关的#if或#ifdef指令放在相同的文件中
注:这并不排除把所有这样的指令放在众多被包含文件中的可能性,只要把与某一序列相关的所有指令放在一个文件中即可
文件包含
文件包含是预处理的一个重要功能,它将多个原文件链接成一个源文件进行编译,结果将生成一个目标文
件。c语言提供#include命令来实现文件包含的操作,它实际是宏替换的延伸,有两种格式:
1、格式1:
#include<filename>
其中,filename为要包含的文件名称,用尖括号括起来,也称为头文件,表示预处理到系统规定的路径中
去获取这个文件(即c编译系统提供的并存放在指定子目录下的头文件)。找到文件后,用文件内容替换该语句。
2、格式2:
#include"filename"
双引号表示预处理应在当前目录中查找文件名为filename的文件,若是没有找到,则按照系统指定的路径
信息搜索其他目录。找到文件后,用文件内容替换该语句。
#include是将已存在文件的内容嵌入到当前文件中
规则:在include指令的头文件名中,不应该出现非标准字符。
#include指令后应该紧接着<filename>或者"filename"形式的头文件
#error预处理
作用:编译程序时,只要遇到#error就会生成一个编译错误提示信息,并且停止编译
语法格式为:#error error-message
#line预处理
作用:改变当前行数和文件名称,它们是在编译程序中预先定义的标识符
命令基本形式:#line number["filename"]
其中[]内的文件名可以省略
例:#line 30 a.h
其中,文件名a.h可省略不写