c++的编译环境

来源:互联网 发布:qt 连接mysql 编辑:程序博客网 时间:2024/05/27 09:46

  初学c++语言的时候,我很纳闷,为什么同样是包含头文件的include,在c语言中被包含的头文件一般都是.h文件,而在c++中包含的头文件,可以是.h文件,还可以是没有后缀名的文件(如典型的iostream),当然,其他的.hpp文件在这里暂且不论。还有,为什么c++包含的头文件可以是stdio.h,还可以是cstdio等等。

  它们之间的差别是什么?这得从c++的编译环境说起了。

来看这张图:
这里写图片描述

(1) c语言兼容库
  c++语言自诞生以来就肩负兼容c语言的重担,所以在c++的编译环境中会内置c库。在c++程序中,我们可以直接包含stdio.h文件

#include <stdio.h>

  stdio.h是源于c语言标准c库的文件,所以其头文件是.h文件合情合理。这样子就可以使得c语言程序可以不做修改拿到c++编译环境中编译。

(2) c++标准库
  c++标准库并非c++语言的一部分,它是由类库和函数库组成,其头文件是不包含.h后缀的,且定义的类和对象都位于std命名空间中。值得注意的是,c++标准库涵盖了c库的所有功能文件,如标准c库的stdio.h、stdlib.h,在c++标准也有也同样功能的文件,为cstdio、stdlib。
既然c++标准库已经涵盖了标准c库,为什么编译环境还要集成c语言兼容库呢?还是那句话,这样子就可以使得c语言程序可以不做修改拿到c++编译环境中编译。

(3)编译器扩展库
  这是针对不同的编译器而独有扩展的,例如g++和vc++,它们在这一板块就不同

(4)c++标准语法模块
不用说,这是c++标准语法的支持

(5)c++扩展语法模块
同样是针对不同的编译器而独有扩展语法

到这里,之前的疑惑就迎刃而解了。

  c++标准库还预定义了很多常用的数据结构,如链表、栈、队列等等。这也是接下来要学习的关键。强调一点,c++标准库的所有函数、类库都位于std命名空间中,在使用这些类库或者函数时候,要么需要作用域限定”std::”,要么使用其命名空间using namespace std;

原创粉丝点击