C++中#include包含头文件带 .h 和不带 .h 的区别

C++中#include包含头文件带 .h 和不带 .h 的区别?
如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同?

之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用
using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C+
+标准化过程为C++开发者做了哪些有意义的工作。

(1)C++增加了名称空间概念,借以将原来声明在全局空间下的标识符声明在了
namespace std下。
(2)统一C++各种后缀名,如.h、.hpp、.hxx等。标准化之前的头文件就是带后缀名的文
件,标准化后的头文件就是不带后缀名的文件。C++ 98 规定用户应使用新版头文件,对旧
版本头文件不在进行强制规范,但大多数编译器厂商依然提供旧版本头文件,以求向下兼
容。

也就是说带 .h 的头文件是旧标准的,如果想用新的标准的头文件就不要带 .h。

另外,为了和C语言兼容,C++标准化过程中,原有C语言头文件标准化后,头文件名前带个
c字母,如cstdio、cstring、ctime、ctype等等。这些头文件都可以在 C:\Program
Files\Microsoft Visual Studio 10.0\VC\include 这个目录下找到(以VC2010为例)。
也就是说,我们如果要用C++标准化了的C语言头文件,就得作如下的转换

#include <stdio.h> --> #include <cstdio>
#include <stdlib.h> --> #include <cstdlib>
#include <string.h> --> #include <cstring>

#if !defined(__cplusplus)
#  include <mem.h>
#else /* __cplusplus */
#  if !defined(__USING_STD_NAMES__)
#    include <mem.h>
#  else /* __USING_STD_NAMES__ */
#    include <memory.stl>
#  endif /* __USING_STD_NAMES__ */
#endif /* __cplusplus */

C中

<*.h>表示优先中系统目录中查找 该头文件  比如#include <stdio.h>  这是系统中的
"*.h"表示优先从当前目录中查找  该头文件  比如#include "head.h"   这是你自己写的http://www.cnblogs.com/feiling/articles/3244237.html
时间: 2024-10-19 17:18:44

C++中#include包含头文件带 .h 和不带 .h 的区别的相关文章

include包含头文件的语句中,双引号和尖括号的区别

include包含头文件的语句中,双引号和尖括号的区别 #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样. #include 指令有两种使用形式 #incl

include包含头文件的语句中,双引号和尖括号的区别是什么?

include包含头文件的语句中,双引号和尖括号的区别是什么?  #include <> 格式:引用标准库头文件,编译器从标准库目录开始搜索 尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件; 尖括号:在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: #incluce "" 格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常

include 包含头文件的语句中 , 双引号和尖括号的区别是什么 ?

#incluce ""格式: 引用非标准库的头文件,编译器从用户的工作目录开始搜索.双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常用于包含程序作者编写的头文件:尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件. 尖括号:在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: 双引号:首先在当前的源文件目录中查找,若未找到才到包含目录中去查找. 详解: 预处理器发现 #include 指令后,就会寻

C语言包含头文件时用引号和尖括号的区别

用尖括号 #include <>:    一般用于包含标准的库头文件,编译器会去系统配置的库环境变量和者用户配置的路径去搜索,而不会在项目的当前目录去查找 用双引号 #include "":    一般用于包含用户自己编写的头文件,编译器会先在项目的当前目录查找,找不到后才会去系统配置的库环境变量和用户配置的路径去搜索 尖括号和双引号,区别不是很重要的.其实编译器搜索包含文件,是依据搜索路径环境设置,那是很灵活的.一般说推荐用尖括号,不过是减少搜索路径加快预处理速度的意思,

怎么写好一个C++的类(二)不建议直接include包含cpp文件

在很多书上都教了#include包含头文件,但是没有教为什么不能包含源文件...所以有一些同学试过直接包含源文件(好吧,我承认,我在大学时候也这样做过,而且很幸运没有出问题). 那到底应不应该包含源文件呢? 我想用一个反证法,如果直接包含.cpp文件,那cpp文件中的static变量和接口不是全暴露给外部的.cpp文件了吗,那样要static和接口的在本文件生命周期有效这一个限定有毛用?不直接包含源文件,就可以把程序按照文件进行模块划分.(可能很多同学说,总是说模块化,就知道吹这些名词,都不感觉

C++包含头文件中&lt;&gt;和&quot;&quot;的区别

#include "book.h" #include<iostream.h> 在刚开始学习都会有这种迷惑,有的程序用<>,有的却用"",那么二者到底什么区别呢,什么情况下使用呢? <>和""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录,""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量所列出的

【Note2】用keil对工程编译时,工程中已经包含的文件会报错:cannot open source input file usb_conf.h No such file or directory

错误举例: ..\..\Libraries\STM32_USB-FS-Device_Driver\inc\usb_type.h(21): error:  #5: cannot open source input file "usb_conf.h": No such file or directory 这是因为没有设置 STM32 固件库的目录, 编译器就默认到 "Keil"根目录下的某某目录找去了.如果现在编译程序,会报错的 解决方法:引用固件库文件所在的目录需要在

C++ 包含头文件 和 宏的使用 和 条件编译

1 #define命令剖析 1.1   #define的概念     #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本.该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义. (1)简单的宏定义: #define <宏名> <字符串> 例: #define PI 3.1415926 (2) 带参数的宏定义 #define <宏名> (<参数表>) <宏体> 例

C++中类的前置声明和包含头文件的区别

一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,假设我们有两个类A和B,分别定义在各自的头文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B; class A{ public: B b;}; class B{ public: A a;}; 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的,在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了,为什么要更改A而