stdio.h не стандартный в C ++? - PullRequest
       28

stdio.h не стандартный в C ++?

14 голосов
/ 29 сентября 2011

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

#include <stdio.h>

// и

#include <cstdio>

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

это правда?

Ответы [ 4 ]

28 голосов
/ 29 сентября 2011

stdio.h стандартно, но не рекомендуется. Всегда предпочитайте cstdio в C ++.

[n3290: C.3.1/1]: Для совместимости со стандартной библиотекой C, Стандартная библиотека C ++ предоставляет заголовки 18 C (D.5), но их использование устарел в C ++.

[n3290: D.5/3]: [ Пример: Заголовок <cstdlib> гарантированно предоставляет свои объявления и определения в пространстве имен std. Это может также предоставить эти имена в глобальном пространстве имен. Заголовок <stdlib.h> гарантированно предоставляет те же объявления и определения в глобальном пространстве имен, так же, как в стандарте C. Это также может укажите эти имена в пространстве имен std. - окончательный пример ]

7 голосов
/ 29 сентября 2011

Это неправда, поскольку основная цель C ++ - обратная совместимость с C. Единственное отличие состоит в том, что для

#include <cstdio>

все функции находятся в std пространстве имен

3 голосов
/ 29 сентября 2011

Стандартные заголовки C включены в стандартную библиотеку C ++ для совместимости.

Разница в том, что идентификаторы в соответствующих заголовках C ++ должны (также) находиться в пространстве имен std, тогда как идентификаторы в заголовках C должны (также) быть доступны в глобальном пространстве имен.

Кроме того, *Заголовки 1005 * добавляют перегрузки для таких функций, как abs, pow и т. Д.

Кроме того, заголовки C ++ заменяют некоторые макросы классификации / сравнения C перегруженными функциями.

0 голосов
/ 29 сентября 2011

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

...