Я знаю, что большинство компиляторов позволяют:
#include <stdio.h>
//и
#include <cstdio>
Но кто-то утверждал, что < stdio.h > на самом деле не является стандартом С++.
- это правда?
Я знаю, что большинство компиляторов позволяют:
#include <stdio.h>
//и
#include <cstdio>
Но кто-то утверждал, что < stdio.h > на самом деле не является стандартом С++.
- это правда?
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]
Это не так, потому что главная цель С++ - обратная совместимость с C. Единственное отличие состоит в том, что для
#include <cstdio>
все функции находятся в std
пространстве имен
Стандартные заголовки C включены в стандартную библиотеку С++ для обеспечения совместимости.
Различие заключается в том, что идентификаторы в соответствующих заголовках С++ должны (также) находиться в пространстве имен std, тогда как идентификаторы в заголовках C должны (также) быть доступными в глобальном пространстве имен.
Кроме того, заголовки <c...>
добавляют перегрузки для таких функций, как abs
, pow
и т.д.
Кроме того, заголовки С++ заменяют некоторые макрокоманды классификации/сравнения C с перегруженными функциями.
Стандартная библиотека С++ явно содержит стандартную библиотеку C, поэтому является полностью легитимной частью С++. И если вы говорите об использовании #include <stdio.h>
в С++-коде, то вы не должны этого делать, вызывать синтаксис C в коде С++, вы должны всегда использовать cstdio