cstdio stdio.h命名空间

时间:2012-05-05 08:45:30

标签: c++ header

我在cstdio的c ++参考中看到了这一行:

图书馆的每个元素都在std namespace中定义 但我尝试了代码:

std::printf("hello world"); 

printf("hello world");

C ++标头是否将名称放在std和全局命名空间中

2 个答案:

答案 0 :(得分:45)

包括cstdiostd命名空间中导入符号名称,在全局命名空间中导入可能。 包括stdio.h在全局命名空间中导入符号名称,在std命名空间中导入可能

这同样适用于所有c-style标题。


<强>参考:
C ++ 11标准

附件D(规范性)兼容性特征[depr] 陈述:

D.6 C标准库标题

  

1为了与C标准库和C Unicode TR兼容,C ++标准库提供了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放置在全局范围内命名空间范围。未指定这些名称是在名称空间std的名称空间作用域(3.3.6)中首先声明或定义的,然后通过显式使用声明(7.3.3)注入全局名称空间作用域。

     

3 [示例:标题<cstdlib>确定在命名空间std中提供其声明和定义。它还可以在全局命名空间中提供这些名称。标头<stdlib.h>确实在全局命名空间中提供相同的声明和定义,就像在C标准中一样。它还可以在命名空间std中提供这些名称。 - 例子]

答案 1 :(得分:9)

根据libstdc ++ docs:

  

标准指定如果包含C样式标题   (在这种情况下为<math.h>),符号将在全局中提供   命名空间,也许在命名空间std ::(但这不再是一个公司   要求。)另一方面,包括C ++风格的标题   (<cmath>)保证在命名空间std 中找到实体   也许在全局命名空间中。

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