стдио.h не стандартно в C++?
Я знаю, что большинство компиляторов допускают и то, и другое:
#include <stdio.h>
/ / и
#include <cstdio>
Но кто-то утверждал, что на самом деле не является стандартом C++.
Это правда?
4 ответа:
stdio.h
является стандартным, но устаревшим. Всегда предпочитайтеcstdio
в C++.
[n3290: C.3.1/1]:
для совместимости со стандартной библиотекой C, Стандартная библиотека C++ предоставляет 18 заголовков C (D. 5), но их использование является устарел в C++.
[n3290: D.5/3]:
[ пример: заголовок<cstdlib>
несомненно предоставляет свои объявления и определения в пространстве именstd
. Оно может также предоставлять эти имена в глобальном пространстве имен. заголовок<stdlib.h>
несомненно предоставляет те же объявления и определения в глобальном пространстве имен, как и в стандарте Си. Он также может укажите эти имена в пространстве именstd
. -конец примера ]
Это не так, потому что основная цель C++ - обратная совместимость с C. единственная разница заключается в том, что для
#include <cstdio>
Все функции находятся в пространстве имен
std
Заголовки стандарта C включены в стандартную библиотеку C++ для обеспечения совместимости.
Разница заключается в том, что идентификаторы в соответствующих заголовках C++ должны (также) находиться в пространстве имен std, тогда как идентификаторы в заголовках C должны (также) быть доступны в глобальном пространстве имен.Кроме того, заголовки
<c...>
добавляют перегрузки для таких функций, какabs
,pow
и т.д.Кроме того, заголовки C++ заменяют некоторые макросы классификации/сравнения C перегруженными функциями.