头文件

来源:互联网 发布:nginx 只允许域名访问 编辑:程序博客网 时间:2024/06/09 19:10
 
1.C++标准库还提供了一组扩展的基本数据类型其中包括字符串string 复数complex
number 向量vector 和列表list 例如
// 为了使用string 对象下面的头文件是必需的
#include <string>
string current_chapter = "Getting Started";
// 为了使用vector 对象下面的头文件是必需的
#include <vector>
vector<string> chapter_titles( 20);
current_chapter 是一个字符串对象被初始化为字符串文字Getting Started chapter_title
是一个向量包含有20 个字符串类型的元素以下这种特殊语法
vector <string>指示编译器创建一个能够存放字符串元素的向量类型要定义一个能够存放20 个整数的向量对象我们可以这样写
vector<int> ivec(20);
2. #include 指示符读入指定文件的内容它有两种格式
#include <some_file.h>
#include "my_file.h"
如果文件名用尖括号< > 括起来表明这个文件是一个工程或标准头文件查
找过程会检查预定义的目录我们可以通过设置搜索路径环境变量或命令行选项来修改这些目录,如果文件名用一对引号括起来则表明该文件是用户提供的头文件查找该文件时将从当前文件目录开始被包含的文件还可以含有#include 指示符由于嵌套包含文件的原因一个头文件可能会被多次包含在一个源文件中条件指示符可防止这种头文件的重复处理例如
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
/* Bookstore.h 的内容 */
#endif
 
条件指示符#ifndef 检查BOOKSTORE_H 在前面是否已经被定义这里BOOKSTORE_H是一个预编译器常量习惯上预编译器常量往往被写成大写字母如果BOOKSTORE_H在前面没有被定义则条件指示符的值为真于是从#ifndef #endif 之间的所有语句都被包含进来进行处理相反如果#ifndef 指示符的值为假则它与#endif 指示符之间的行将被忽略为了保证头文件只被处理一次把如下#define 指示符#define BOOKSTORE_H
放在#ifndef 后面这样在头文件的内容第一次被处理时BOOKSTORE_H 将被定义
从而防止了在程序文本文件中以后#ifndef 指示符的值为真.
 
3.编译C++程序时编译器自动定义了一个预处理器名字__cplusplus 注意前面有两个下划线因此我们可以根据它来判断该程序是否是C++程序以便有条件地包含一些代码.
另外两个比较有用的预定义名字是__LINE____FILE__ __LINE__记录文件已经被
编译的行数__FILE__包含正在被编译的文件的名字可以这样使用它们
if ( element_count == 0 )
cerr << "Error: " << __FILE__
<< " : line " << __LINE__
<< "element_count must be non-zero./n";
另外两个预定义名字分别包含当前被编译文件的编译时间__TIME__ 和日期
__DATE__
在代码中常利用assert()来判断一个必需的前提条件以便程序能够正确执行.
 
#include <cassert>
cassert 的内容被读入到我们的文本文件中但是由于所有的C++库名字是在名字空间std 中被定义的因而在我们的程序文本文件中它们是不可见的除非用下面的using 指示符显式地使其可见
using namespace std;
使用C 头文件的#include 指示符
#include <assert.h>
就可以直接在程序文本文件中使用名字assert() 而无需使用using 指示符. 
原创粉丝点击