设为首页 加入收藏

TOP

C++中的预编译处理方式
2017-11-10 08:32:38 】 浏览:300
Tags:编译 处理 方式

预处理程序又称预处理器,它包含在编译器中。预处理程序首先读源文件。预处理的输出是“翻译单元”,它是存放在内存中的临时文件。编译器接受预处理的输出,并将源代码转换成包含机器语言指令的目标文件。

预处理程序对源文件进行第一次处理,它处理的是预处理命令。C++提供的预处理命令主要有3种:文件包含命令(头文件),宏定义命令,条件编译命令。

1.文件包含命令(头文件)

所谓“文件包含”是指将另一个源程序的内容合并到源程序中。C++程序提供了#include命令用于实现文件包含的操作它有下列两种格式:

●#include <文件名>

●#include “文件名”

文件名一般以“.h”为扩展名,因而称它为“头文件”。

第一种形式使用“<>”将文件名括起来。这些头文件一般存在于C++系统目录中的include子目录。C++预处理程序遇到这条命令后,就到include子目录中搜索给出的文件,并把它嵌入到当前文件中。这种形式也是标准形式。

第二种形式使用双引号将文件名括起来。预处理程序遇到这种格式的包含命令后,首先在当前文件所在目录中搜索,如果找不到,再按标准方式进行搜索。这种方式适合用于用户编写的头文件。

#include文件可以嵌套,即在一个被包含的文件中可以包含另一个文件。

2.宏定义命令

#define用来进行宏定义。宏定义有两种形式:不带参数的宏和带参宏。

C语言中,#define用来建立常量,或者定义带参数的宏。在C++中仍然保留

3.条件编译

一般情况下,源程序中所有的语句都参加编译,但可以对其中一部分内容只在满足一定条件下才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。条件编译可使同一源程序在不同的编译条件下得到不同的目标代码。

C++提供的条件编译命令有以下3种形式。

①第1种格式如下。

#ifdef 标识符

程序段 1

[#else

程序段 2]

#endif

该形式命令的作用是当指定的标识符已经被#define定义过,则在编译段1,否则程序段1,否则程序段2。也可以用#else部分。

例如,在调试程序时,有时希望输出一些信息,而在调试完成之后不再需要。可以在源程序中插入以下条件编译。

#ifdef DEBUG

cout<<“ x=”<

#endi

如果在该条件编译之前有命令行“#define DEBUG”,则在程序运行时会输出x、y、z的值,以便调试时使用和分析。调试完成后只需将这个#define命令行删除即可。

②第二种格式如下

#ifndef 标识符

程序段 1

[#else

程序段 2]

#endi

如果标识符没有被#define命令定义过,则编译程序段1,否则就编译程序段2.还有就是我们在后面建立工程时将用到的条件编译。

在工程的地方条件指示符#ifndef的最主要是目的是防止头文件中添加头文件,所以就有可能出现头文件重复被编译的情况,这时程序就会报错,因此就要用到条件编译。形式如下:

#ifndef _头文件名_H

#define _头文件名_H

#endi

这样一个工程文件里同时包含两个同样的同文件时,就不会出现重定义的错误了。

#include

usingnamespace std;

intmain(intargc,char *argv)

{

#ifdef PI

cout<<"PI = "<<PI<<endl;

#else

#define PI 4

#endif

cout<<"PI = "<<PI<<endl;

#undef PI// 撤销PI的宏定义

retrun0;

}

③第三种格式如下:

#if 表达式 1

程序段 1

[#elif 表达式2

程序段 2]

#endif

该形式的命令的作用是当指定的表达式(必须是整型常量表达式)值为真(非零)时编译程序段1,否则编译程序段2。也可以没有#else部分。

④第四种格式如下。

#if 表达式1

程序段 1

#elif 表达式2

程序段 2

#elif 表达式3

程序段 3

[#else

程序段n+1]

#endif

其中“elif”的含义是“else if”。该命令的作用是如果表达式1值为真,则编译程序段1;否则,如果表达式2值为真,则编译程序段2;如果所有表达式值都为假,则编译程序段n+1。也可以没有#else部分。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++中,什么是成员模板?成员模板.. 下一篇C++ 11 nullptr关键字、C/C++中的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目