cstdio stdio.h命名空间
我从cstdio
的c ++参考中看到这一行:
库中的每个元素都在std namespace
定义。 但我试过的代码:
std::printf("hello world"); printf("hello world");
C ++头文件是否将名称放在std和全局名称空间中是真的吗?
包括cstdio
在std
命名空间和可能的Global命名空间中导入符号名称。
包括stdio.h
在全局命名空间和可能在std
命名空间中导入符号名称。
所有c风格的标题也是如此。
参考:
C ++ 11标准
附录D(规范性)兼容性function[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
forms的name.h
,就像每个名字放在标准库名字空间中的相应的cname header
,放在全局名字空间的范围内。 没有指定这些名称是首先在名称空间std的名称空间作用域(3.3.6)中声明还是定义的,然后通过显式使用声明(7.3.3)将其注入到全局名称空间作用域中。3 [示例:头文件
<cstdlib>
确实在命名空间std中提供了它的声明和定义。 它也可能在全局命名空间中提供这些名字。 头文件<stdlib.h>
确实在全局命名空间中提供了相同的声明和定义,就像C标准一样。 它也可能在名字空间std中提供这些名字。 – 例子]
根据libstdc ++文档:
该标准规定,如果包含C样式头(在这种情况下为
<math.h>
),则符号将在全局名称空间中可用,也许在名称空间std ::中可用(但这不再是一个坚定的要求)。另一方面,包括C ++风格的头文件(<cmath>
)保证实体可以在命名空间std中find,也可以在全局命名空间中find。
http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html