стдио.h не стандартно в C++?


Я знаю, что большинство компиляторов допускают и то, и другое:

#include <stdio.h>

/ / и

#include <cstdio>

Но кто-то утверждал, что на самом деле не является стандартом C++.

Это правда?

4 14

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 перегруженными функциями.

Стандартная библиотека C++ явно содержит стандартную библиотеку C, поэтому является полностью законной частью C++. И если вы говорите об использовании #include <stdio.h> в коде C++, то вы не должны этого делать, потому что это синтаксис C, в коде C++ вы должны использовать всегда cstdio