预处理命令
预处理命令是由ANSIC统一规定的,但他不是C语言本身的组成部分,不能直接对他们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,若程序中用#define命令定义了一个符号常量A,则在预处理时将程序中所有的A都置换为指定的字符串。若程序中用#include命令包含了一个文件“stdio.h”,则在预处理时将stdio.h文件中的实际内容代替该命令。经过预处理后,程序中不再包含预处理命令,在后再有编译程序对预处理后的源程序进行通常的编译处理,得到可供程序执行的目标代码。
C提供的预处理功能主要包括以下三种:
1:宏定义#define;
2:文件包含#include
3:条件编译#ifndef XXX
#define XXX
#else ...
#endif
为了与一般的C语句相区别,宏定义命令都以“#”开头。
宏定义
不带参数的宏定义
#define 标示符 字符串
宏名一般用大写字母表示,以便于变量名相区别。
使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。
宏定义使用宏名替代一个字符串,也就是做简单的置换,不做正确性检查。
宏定义不是C语句,不必在行末加分号。
#define出现在程序中函数的外面,红名的有效范围为定义命令之后到源文件结束。
可以用#undef命令终止宏定义的作用域。
在进行宏定义时,可以引用已定义的宏名,可以层层置换。
对程序中“”中的与宏名相同的字符不做置换。
宏定义是专门用于预处理命令的一个专用名词,他与定义变量的含义不同,只作字符替换,不分配内存空间。
待参数的宏定义注意其书写格式
文件包含处理
所谓文件包含处理是指一个源文件可以将另外一个源文件的全部内容包含进来。
在#include命令中,文件名可以用<>或“”,二者的区别是用<>时,系统到存放C库函数头文件所在的目录中去寻找要包含的文件。“”时,系统先在用户当前目录中寻找要包含的文件,若找不到再去库函数头文件中去寻找。(库函数的用<>,自己写的用“”)
条件编译的三中形式
#ifdef 标示符
程序段1;
#else ...
程序段2;
#endif
它的作用是当指定的标示符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2
(2)
#ifndef 标示符
程序段1;
#else ...
程序段2;
#endif
它的作用是当指定的标示符未被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2
(3)
#if 表达式
程序段1;
#else ...
程序段2;
#endif
关键词:
语言学习
小结
关于
预处理
命令
以及
条件
编