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

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

Every element of the library is defined within the std namespace. но я попробовал код:

<code>std::printf("hello world"); 

printf("hello world");
</code>

это правда, чтоC++ headers puts the names in both the std and the global namespace?

Ответы на вопрос(2)

The standard specifies that if one includes the C-style header (<math.h> in this case), the symbols will be available in the global namespace and perhaps in namespace std:: (but this is no longer a firm requirement.) One the other hand, including the C++-style header (<cmath>) guarantees that the entities will be found in namespace std and perhaps in the global namespace.

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

 14 апр. 2015 г., 12:17
Я думаю, что если мы используем<cmath> тогда это будет гарантировать, что юридические лица будут доступны в соответствии сnamespace std и, следовательно, не в глобальном пространстве имен.
Решение Вопроса

В том числеcstdio импортирует имена символов вstd пространство имен иpossibly в глобальном пространстве имен.
В том числеstdio.h импортирует имена символов в глобальном пространстве имен иpossibly вstd Пространство имен.

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

Reference:
Стандарт C ++ 11

Annex D (normative) Compatibility features [depr] состояния:

D.6 C standard library headers

1 For compatibility with the C standard library and the C Unicode TR, the C++ standard library provides the 25 C headers, as shown in Table 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 Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. It is unspecified whether these names are first declared or defined within namespace scope (3.3.6) of the namespace std and are then injected into the global namespace scope by explicit using-declarations (7.3.3).

3 [ Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace std. It may also provide these names within the global namespace. The header <stdlib.h> assuredly provides the same declarations and definitions within the global namespace, much as in the C Standard. It may also provide these names within the namespace std. —end example ]

 05 мая 2012 г., 11:04
@MrLister: Да, и нет никаких сомнений в том, что в стандарте об этом ясно говорится.
 05 мая 2012 г., 10:56
Так что это зависит от реализации? Интересно, я не знал.
 08 янв. 2014 г., 17:09
Правильно ли я предпочитаю включать & lt; cstdio & gt; и это "stdio.h" является "устаревшим"?
 12 янв. 2019 г., 17:42
@javapowered Официально, да. Начиная с C ++ 11 заголовки C-совместимости были указаны в разделе «Функции совместимости». Приложение к стандарту, которое описывает"deprecated features, where deprecated is defined as: Normative for the current edition of this International Standard, but having been identified as a candidate for removal from future revisions", Помечать их как «идентифицированных как кандидатов на удаление» возможно, порочно, хотя.open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0619r0.html#3.5 утверждает, что заголовки будут сохранены навсегда, и должны быть устаревшими.

Ваш ответ на вопрос