2010-05-17 68 views
16

我使用的是EXIT_FAILURE宏,所以我需要包含stdlib.h或cstdlib。但我不知道有什么不同。我应该使用cXXX风格的头文件而不是XXX.h吗?C++中stdlib.h和cstdlib之间的主要区别是什么?

谢谢。

+0

可能重复[有什么区别cstdlib和stdlib.h](http://stackoverflow.com/questions/2900785/whats-the-difference-between-cstdlib-and-stdlib-h) – 2017-03-25 04:09:07

+0

退房我在这里更新了答案。 http://stackoverflow.com/questions/13889467/should-i-include-xxxx-h-or-cxxxx-in-c-programs/43016708#43016708 – 0xDEFACED 2017-03-25 15:37:28

回答

17

由于EXIT_FAILURE是一个宏,所以您没有区别。该cstdlib版本将会把所有的函数的名称为std命名空间,所以你可以说这样的话:

std::exit(0); 

但宏不尊重的命名空间,你不能说:

std::EXIT_FAILURE 
+0

谢谢,但我仍然可以调用'退出(EXIT_FAILURE)'没有当我包含'cstdlib'时''std ::'。 – Brian 2010-05-17 09:48:33

+0

@Brian是的,退出函数将在全局和std命名空间中, – 2010-05-17 09:50:59

+0

此外,一些重载被声明为处理[strtol()的常量问题](http://www.cpptalk.net/strtol- const-ness-problem-vt54984.html)和类似的问题。 – 2013-03-03 11:23:00

25

<cstdlib>只是<stdlib.h>包装在std名称空间中。您应该使用<cstdlib>以保持您的全局名称空间清洁。

相关问题