C++中的预处理

来源:互联网 发布:网络信息安全方案 编辑:程序博客网 时间:2024/05/01 23:39

预处理器指示符用‘#’标识,例如:#include。

处理这些指示符的程序被称为“预处理器”,通常预处理器是捆绑在编译器中的。

 

#include <file1.h>

#include "file2.h"

用尖括号<>括起来来的,表明这个头文件是一个标准头文件,查找的时候会从预定义的目录开始,我们可以通过设置路径环境变量或命令行选项来修改这个路径。

用引号“”括起来的,表明该文件是由用户提供的头文件,查找的时候会从当前目录开始查找。

 

条件指示符可以防止一个头文件被重复定义。

#ifndef  BOOKSTORE_H

#define BOOKSTROE_H

#endif

其中BOOKSTORE_H是一个预编译器常量(通常大写)。

 

编译C++程序时,编译器会自动定义一个预处理器常量__cplusplus(前面是两个下划线),我们可以根据这个预处理器常量来判断一个程序是否是C++程序

在编译标准C时,编译器会自动定义__STDC__。当然__cplusplus和__STDC__不能同时被定义。

还有两个比较有用的预定义名字__LINE__和__FILE__。

 _LINE__记录文件已经被编译的行数;__FILE__记录正在被编译的文件名。例子如下:

 _if ( element_count == 0 )
 cerr << "Error: " << __FILE__
        << " : line " << __LINE__
        << "element_count must be non-zero./n";

__TIME__和__DATE__分别表示当前被编译文件的开始编译时间和日期。

如果开始的时间是2011年3月22号15点23分30秒,则__TIME__表示15:23:30;__DATE__表示March 22 2011

在编译一个文件时,只有__LINE__发生了改变,__FILE__、__TIME__、__DATE__都不变;如果编译的文件发生变化时,则这四个预编译名字都发生了改变。

 

assert.h是一个C库头文件的名字,每一个C库的头文件都有一个C++名字,C库文件的C++名字总是以C开头,并且将末尾的.h去掉。

assert.h的C++名字就是cassert。

C++程序调用C库头文件的方法有两种:

第一种是直接使用C库的头文件名:

#include <assert.h>

另一种是使用C库头文件的C++名字,但是由于所有的C++库名字是在命名空间std中定义的,在程序文本文件中是不可见的,因此,需要使用using标识符显式的使其可见。

#include <cassert>

using namespace std;

原创粉丝点击