c++和c的头文件区分

来源:互联网 发布:数据库pdforacle网盘 编辑:程序博客网 时间:2024/05/01 12:01

一直都是胡乱用,也没有具体查过,今天闲来无事,一探究竟(以下内容来自别人博客和自己代码测试,如有错误,希望指正)

  • c语言头文件有.h,且里面声明的实体都是全局的。而c++标准库的头文件不带.h,且里面的实体都是声明在名空间std里。

举个例子:
iostream.h里面定义的所有类以及对象都是在全局空间里,所以你可以直接用cout;但在iostream里面,它所定义的东西都在名字空间std里面。所以你必须
using namespace std //使用名字空间(使用所有)
或者
using namespace std::cout//只使用cout
或者
在代码前可以用sdt::cout<<表示使用的是std中的cout。

#include<iostream.h> //必须要加上.hvoid main(){cout<<"Right?"<<endl;}#include<iostream> //此处必须去掉.husing namespace std ;void main(){cout<<"Right?"<<endl;}    
  • 头文件string和cstring都属于c++的组成部分,而string.h属于c

c文件中,是没有string这一类型的,没有#include < string >,所以不能通过string s1来定义一个字符串类型的变量,只能通过字符数组来和指向字符数组的指针定义字符变量,例如:
char str[]=”This is a string”。
但是,c文件里面可以#include < string.h>(对应的是基于char*的字符串处理函数),例如:返回字符串长度的strlen()函数、复制一个字符串到另一个字符串里的strcpy()函数。可以理解,这些方法的参数都是指向字符类型变量的指针,而不是string类型的变量。

#include <stdio.h>#include <string.h>int main(){    char c1[]="nihao";    char c2[]="nihao";    int re=strcmp(c1,c2);    int len=strlen(c1);    printf("%d\n",re);    printf("%d\n",len);    return 0;}

然而在c++中,通过#include < string > 就可以直接定义string s1(创建了字符串对象 s,s 是一个空字符串,其长度为0),同时,string对象还有很多方法(插入删除等等),使字符串的处理更简单方便。
C++标准函数库是在C的基础上扩展的,C++标准在继承C标准的时候,去掉了头文件后面的.h,然后在前面加上了C。比如C标准中< stddef.h >到了C++标准中变成了cstddef,可以认为,cstring是C++的组成部分,它可以说是把C的string.h的升级版,但它不是C的组成部分。在c++中同时#include < cstring >意味着你可以对char*变量使用c文件中的strlen等字符串处理函数。

0 0
原创粉丝点击