2010-05-17 4 views
16

Я использую макрос EXIT_FAILURE, поэтому мне нужно включить stdlib.h или cstdlib. Но я не знаю, в чем разница. Должен ли я использовать заголовочный файл стиля cXXX, а не XXX.h?В чем основное отличие между stdlib.h и cstdlib в C++?

спасибо.

+0

Возможный дубликат [В чем разница между cstdlib и stdlib.h?] (Http://stackoverflow.com/questions/2900785/whats-the-difference-between-cstdlib-and-stdlib-h) –

+0

Отъезд мой обновленный ответ здесь. http://stackoverflow.com/questions/13889467/should-i-include-xxxx-h-or-cxxxx-in-c-programs/43016708#43016708 – 0xDEFACED

ответ

17

Поскольку EXIT_FAILURE - это макрос, он не имеет никакого значения, которое вы включаете. Версия cstdlib поставит имена всех функций в std пространства имен, так что вы можете сказать что-то вроде:

std::exit(0); 

но макросы не уважают пространство имен, вы не можете сказать:

std::EXIT_FAILURE 
+0

Спасибо, но я все еще могу называть 'exit (EXIT_FAILURE)' без 'std ::', когда я включаю 'cstdlib'. – Brian

+0

@Brian Да, функция выхода будет находиться как в глобальном, так и в пространстве имен std, – 2010-05-17 09:50:59

+0

Кроме того, некоторые перегрузки объявлены для решения проблемы [constness strtol()] (http://www.cpptalk.net/strtol- const-ness-problem-vt54984.html) и аналогичные проблемы. –

25

<cstdlib> всего лишь <stdlib.h>, завернутый в пространство имен std. Вы должны использовать <cstdlib>, чтобы ваше глобальное пространство имен было чистым.

Смежные вопросы