#C与C++区别

本文介绍了C和C++预处理指令中标准库的变化,如C的<stdio.h>对应C++的<iostream>,C的<math.h>对应C++的<cmath>。还阐述了C++中命名空间namespace的概念,以及<iostream>和<iostream.h>的区别,同时给出了使用标准库的正确写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

且学且更新吧

2023.2.22

  1. 预处理指令中的标准库发生了变化;

C中为<stdio.h> C++的标准库为<iostream> 注:<iostream.h>写法错误

# include <stdio.h>
# include <iostream>
// 错误 # include <iostream.h>

C中数学库为<math.h> C++中数学库为<cmath>

  1. 出现 命名空间 namespace

std命名空间是C++中标准库类型对象的命名空间。

在标准C++以前,都是用#include<iostream.h>这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C++引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用一套新的头文件,这套头文件的文件名后不加.h扩展名,如iostream、string等等,并且把原来C标准库的头文件也重新命名,如原来的string.h 就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包含的写法也就变成了#include <iostream>。

并不是写了#include<iostream>就必须用using namespace std;我们通常这样的写的原因是为了一下子把std名字空间的东东全部暴露到全局域中(就像是直接包含了iostream.h这种没有名字空间的头文件一样),使标准C++库用起来与传统的iostream.h一样方便,但并不建议这样做,因为使用using namespace std;的话就没有起到命名空间的作用。再次回到了如同没有涉及命名空间时,所有标示符都定义在全局作用于中的混乱情况,不利于程序员创建新对象。

如果不用using namespace std;使用标准库时就得时时带上名字空间的全名,如std::cout << "hello" << std::endl;

<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

如下写法,则出错

#include <iostream.h>

using namespace std;

所以 要么写成

#include <iostream>

using std::cout;

using std::cin;

using std::cerro;

要么写成

#include <iostream.h>

当然最好是前种,因为后种情况如果遇到用户定义的标示符在头文件中已经定义,可能会导致错误,采用using namespace std也是如此。

————————————————

版权声明:红色文本为优快云博主「浮生专栏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.youkuaiyun.com/miss_acha/article/details/7233741

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值