C++ stdio.h在C+中不是标准的+;?
我知道大多数编译器都允许这两种情况:C++ stdio.h在C+中不是标准的+;?,c++,stdio,standard-library,C++,Stdio,Standard Library,我知道大多数编译器都允许这两种情况: #include <stdio.h> #包括 及 #包括 但是有人认为实际上不是C++标准。这是真的吗?stdio.h是标准的,但不推荐使用。在C++中,总是喜欢 CSTDIO < /C> > > < /P> [n3290:C.3.1/1]:与标准C库的兼容性, C++标准库提供18个C标题(D.5),但它们的用法是 在C++中被禁止。< /强> [n3290:D.5/3]:[示例:标题 在命名空间std中提供其声明和定义 也可以在全局命
#include <stdio.h>
#包括
及
#包括
<>但是有人认为
stdio.h
是标准的,但不推荐使用。在C++中,总是喜欢<代码> CSTDIO < /C> > > < /P>
[n3290:C.3.1/1]:
与标准C库的兼容性,
C++标准库提供18个C标题(D.5),但它们的用法是
在C++中被禁止。< /强>
[n3290:D.5/3]:
[示例:标题
在命名空间std
中提供其声明和定义
也可以在全局命名空间中提供这些名称。标题
肯定提供了相同的声明和定义
在全局命名空间中,就像在C标准中一样
在命名空间中提供这些名称std
-结束示例]
C++标准库明确包含C标准库,所以C++是完全合法的部分。如果你在C++代码中使用<代码>包含< /COD>,那么你不应该这样做,因为C++语法中,C代码应该使用CSTDIO
< P>这是不正确的,因为C++的主要目标是与C的向后兼容。唯一的区别是对于#include <cstdio>
#包括
所有函数均在
差异在于,相应的C++头中的标识符必须(也)在STD命名空间中,而C头中的标识符也必须在全局命名空间中可用。 此外,
标题为诸如abs
、pow
等函数添加重载
也可以用C++的头替换一些具有重载功能的C分类/比较宏。代码> STDIO。H/COD>可以把东西放在
/限定符是一件好事。在国际标准中,“弃用”一词的意思是“可以在标准的更高版本中删除”。然而,C头不会消失。它们在C++98中被乐观地弃用,但AFAIK没有实现C++98所要求的干净分离,这无疑是C++11现在允许头污染名称空间的原因。您的技术和历史分析是准确的。但是标题仍然不推荐使用,我看不出有什么理由喜欢它们。如果我在C++代码审查中看到C标题,代码就不会通过。只要C和C++编译器共同生存(大多数编译器都有C和C++模式),并且使用相同的系统包括目录,C标题将在那里,即使它们被从标准中删除。我引用了标准一刻钟前的一段话。-1“此外”是错误的:C++11§D.5/2“每个C头,都有一个使用
格式的名称,其行为就好像由相应的cname头放在标准库名称空间中的每个名称都放在全局名称空间范围内。”@干杯。-阿尔夫:客人说得对。name.h
和类似函数的不同输入类型的重载在abs
中有定义,但在
中没有定义(根本不包括
;它在abs
中,只取int)。@Kundor:在C++11§D.5/2中,你不理解的第一个单词是什么“每个C头,每个C头都有一个表单名.h的名称,其行为就好像由相应的cname头放置在标准库命名空间中的每个名称都被放置在全局命名空间范围内。”?@Cheersandhth.-Alf:嗯,我的编译器也不明白,因为访问者和我说的就是发生的事情。试试看。
#include <cstdio>