Stdio.h не стандартно в С++?

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

#include <stdio.h>

//и

#include <cstdio>

Но кто-то утверждал, что < stdio.h > на самом деле не является стандартом С++.

- это правда?

Ответ 1

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

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

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

Ответ 2

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

#include <cstdio>

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

Ответ 3

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

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

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

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

Ответ 4

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