在C/C++学习笔记(六)中记录了头文件和源文件的探讨,本文将继续探讨更多的相关知识。
#include <>和#include “”的区别
当我们使用#include <文件名>命令时,编译器就到这个文件夹里去找对应的文件。显然,用这种写法去包含一个我们自己编写的头文件(不在那个Include文件夹里)就会出错了。所以包含C++提供的头文件时,应该使用尖括号。
#include "文件名"命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。因此,无论这个文件是C++提供的还是自己编写的,使用#include "文件名"命令一定是正确的。
.h文件
.h文件是c中的文件,包括了操作C风格字符串的函数,如strcpy.strcmp,strcat,strlen等。C 语言里没有字符串这个数据类型,有的只是字符指针或字符数组,C风格字符串也就是以'\0'结尾的字符序列。如下实例:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[]) {
char d[20]="Golden Global";
char *s=" View";
strcat(d,s);
printf("%s\n",d);
getchar();
return 0;
}
新标准库文件
一般一个C++的老的带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。所以<string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数;<string>
是包装了std 的C++头文件,对应的是新的string 类(看下文)。所以c++中可以用<string.h>也可以用<string>,而c中只能用<string.h>,一般说要用strcpy.strcmp,strcat,strlen之类的函数应该include <string.h>,要使用上一博文中介绍的string类应该include <string.h>,但是貌似<string>中已经有了include <string.h>,所以实际中只需要include <string.h>,如下面实例:
#include "stdafx.h"
#include <string>
using namespace std ;
int _tmain(int argc, _TCHAR* argv[]) {
char d[20]="Golden Global";
char *s=" View";
string s1="hello";
strcat(d,s);
//strcat(s2,s);//此处报错
printf("%s\n",d);
getchar();
return 0;
}
c前缀文件
在C++标准化之前,头文件有各种后缀名,如.h,.hpp,.hxx等,标准化之后规定头文件不带后缀名,同时原来的C标准头文件都在前面加了个"c",于是原来C里的string.h,在C++里就变成了cstring,同样的stdio.h,stdlib.h之类的都变成了cstdio、cstdlib一类。为了兼容C,大部分C++编译器都同时提供了这两个版本的头文件,可以认为string.h和ctring是一回事,你可以看一下你的编译器里include目录下的这两个文件,cstring只是简单的include了string.h而已。