cstdlib 和 stdlib.h 有啥区别?
Posted
技术标签:
【中文标题】cstdlib 和 stdlib.h 有啥区别?【英文标题】:What's the difference between cstdlib and stdlib.h?cstdlib 和 stdlib.h 有什么区别? 【发布时间】:2010-05-24 22:32:19 【问题描述】:写C++代码时有什么区别:
#include <cstdlib>
和
#include <stdlib.h>
除了前者主要包含在 std::
命名空间中?
除了编码标准和风格之外,还有什么理由使用其中一种吗?
【问题讨论】:
What's the main difference between stdlib.h and cstdlib in C++?的可能重复 答案似乎都没有提到:在 C++ 中,后者已弃用。 @Pharap 已修复 【参考方案1】:第一个是 C++ 头文件,第二个是 C 头文件。由于第一个使用命名空间,这似乎更可取。
【讨论】:
【参考方案2】:不,除了命名空间的情况之外,它们本质上是相同的。
【讨论】:
【参考方案3】:除了编码标准和风格之外,还有什么理由使用其中一种吗?
是的。 stdlib.h
已弃用这一事实是不使用它的一个很好的理由。它实际上在 1998 年发布的第一个标准中已被弃用。当然,它仍然存在于 C++14 中,并且可能甚至可能存在于 C++17 中(我无法访问 C++17 标准)但是因为它已被弃用,这是一个强烈的信号,你不应该使用它。也许被移除的风险不是很高,但既然如此容易避免,为什么还要在编写新代码时冒险呢?
来自C++14 standard:
这些是已弃用的功能,其中已弃用的定义为: 标准,但已被确定为从未来修订中删除的候选对象。
...
你应该有一个非常有力的论据来使用stdlib.h
而不是cstdlib
除此之外,您还有一个实际问题是cstdlib
正在使用命名空间,这在大多数情况下是可取的。
【讨论】:
这也是完全没用的,因为它永远不会被删除——与 C 的互操作性需要这个。 @StaceyGirl 怎么样? @LightnessRacesinOrbit C 标头将包含stdint.h
并将使用来自全局命名空间的类型。强迫人们为两种语言都 ifdef 是不切实际的。无论标准如何规定,编译器都会发布它。大多数代码库甚至都不关心类型名称之前的标头和std::
。
@StaceyGirl 是的,但大多数(可能是所有)C 头文件都已弃用。
@StaceyGirl 所以你不是在谈论互操作,而是在用两种语言构建相同的代码。是的,在这种情况下,您的所有 C 语言都必须是有效的 C++,反之亦然。但是,如果您正确拆分头文件和源文件并将 C 源文件构建为 C,那么我看不到问题吗?以上是关于cstdlib 和 stdlib.h 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章