Подтвердить что ты не робот

Пространство имен cstdio stdio.h

Я вижу эту строку из ссылки С++ для cstdio:

Каждый элемент библиотеки определяется внутри std namespace. но я пробовал код:

std::printf("hello world"); 

printf("hello world");

верно ли, что заголовки С++ помещают имена как в std, так и в глобальное пространство имен?

4b9b3361

Ответ 1

Включение cstdio импортирует имена символов в пространстве имен std и, возможно, в глобальном пространстве имен.
Включение stdio.h импортирует имена символов в глобальном пространстве имен и, возможно, в пространство имен std.

То же самое относится ко всем заголовкам c-style.


Справка:
Стандарт С++ 11

Приложение D (нормативное) Особенности совместимости [des]:

D.6 C стандартные заголовки библиотек

1 Для совместимости со стандартной библиотекой C и C Unicode TR стандартная библиотека С++ предоставляет заголовки 25 C, как показано в таблице 151.

К ним относятся:

<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h> <complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h> <ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h> <errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h> <fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>

Далее,

2 Каждый заголовок C, каждый из которых имеет имя формы name.h, ведет себя так, как будто каждое имя, помещенное в пространство имен стандартной библиотеки соответствующим cname header, помещается в область глобального пространства имен. Неизвестно, будут ли эти имена сначала объявлены или определены в области пространства имен (3.3.6) пространства имен std и затем будут введены в область глобального пространства имен явным использованием-деклараций (7.3.3).

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

Ответ 2

Согласно libstdС++ docs:

В стандарте указано, что если в один заголовок заголовок C (<math.h> в этом случае), символы будут доступны в глобальном namespace и, возможно, в пространстве имен std:: (но это уже не фирма Требование.) С другой стороны, включая заголовок в стиле С++ (<cmath>) гарантирует, что сущности будут найдены в пространстве имен stdи, возможно, в глобальном пространстве имен.

http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html