源程序是指什么程序编译预处理命令
文件包含:
把指定的文件插入到预处理命令行所在的位置并取代该命令行,即把指定的文件和当前的源程序文件连接成一个源文件。
#include<文件名>
在文件包含目录中去查指定的文件,并将该文件添加到源文件中。
一个被包含的文件中可以含有文件包含命令来包含另一个文件。
#include“文件名”
命令中文件名的位置是当前源文件的位置,若在当前目录中未到该文件,则再到“包含目录”中去查。
宏
用一个标识符表示一个字符串,称为宏,被定义为宏的标识符称为宏名。在编译预处理时对程序中所有出现的宏名用宏定义中的字符串去代换,这就是宏替换。它是由系统编译程序时自动完成的。
无参宏定义
#define 标识符 字符串
如
#define PI 3.14
使用宏时要注意:
(1) 宏定义是用宏名来表示一个字符串,在宏展开时用字符串取代宏名。
(2) 宏定义不是变量定义或语句,在行末不能加分号,如果加上分号则分号也成为字符串的一部分。
(3) 宏定义可以出现在程序的任何地方,其作用域是宏定义命令所在位置开始到源程序结束。如果要终止其作用域可使用#undef命令。
(4) 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时将逐层替换。
(5) #define PI 3.1415926
#define AREA PI*y*y
有参宏定义
#define 宏名(形参表) 字符串
对带参数的宏,在调用中不仅要进行宏展开,而且还要用实参去替换形参。
带参宏调用的语法格式如下:
宏名(实参表);
#define M(x) x+1
K=M(3);
K=3+1
定义有参宏时要注意以下几点:
(1) 有参宏定义中,宏名和形参表之间不能有空格出现。
(2) 在函数中,调用时要把实参的值赋给形参,进行“值传递”。而在带参宏调用中,只是符号替换,不存在值传递问题。
(3) 宏定义中的形参只能是标识符,而宏调用中的实参可以是表达式。
宏替换中对实参表达式不做计算直接照原样替换,字符串内的形参通常用括号括起来以避免出错。
在使用宏时不仅要将形式参数用括号括起来,还应将其整体用括号括起来。
#define S(y) ((y)*(y))
条件编译
条件编译可以按不同的条件去编译不同的程序段。
1#ifdef
#ifdef 标识符
程序段1
#else
程序段2
#endif
功能:如果标识符已被#define定义过,则对程序段1进行编译,否则对程序段2进行编译。格式中的#else部分可以没有,即:
#ifdef 标识符
程序段
#endif
2、#ifndef
语法格式如下:
#ifndef 标识符
程序段1
#else
程序段2
#endif
功能与ifdef形式的功能正好相反。
3、#if 常量表达式
#if 常量表达式
程序段1
#else
程序段2
#endif
功能:如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译,因此可以使程序在不同条件下,完成不同的功能。
上面介绍的条件编译实现的逻辑也可以用条件语句来实现,但是用条件语句将会对整个源程序进行编译,生成的目标代码程序较长,运行时间也较长,采用条件编译则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论