这有效:
#include <iostream>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
但这失败了:
#include <stdio>
Run Code Online (Sandbox Code Playgroud)
什么时候.h不需要?
关于命名空间问题,我没有找到这样的逻辑cstdio:
#pragma once
#ifndef _CSTDIO_
#define _CSTDIO_
#include <yvals.h>
#ifdef _STD_USING
#undef _STD_USING
#include <stdio.h>
#define _STD_USING
#else /* _STD_USING */
#include <stdio.h>
#endif /* _STD_USING */
// undef common macro overrides
#undef clearerr
#undef feof
#undef ferror
#undef getc
#undef getchar
#undef putc
#undef putchar
#define _HAS_CONVENTIONAL_CLIB 1
#define _IOBASE _base
#define _IOPTR _ptr
#define _IOCNT _cnt
#ifndef _FPOSOFF
#define _FPOSOFF(fp) ((long)(fp))
#endif /* _FPOSOFF */
typedef FILE _Filet;
#ifndef RC_INVOKED
#if _GLOBAL_USING
_STD_BEGIN
using ::_Filet;
using ::size_t; using ::fpos_t; using ::FILE;
using ::clearerr; using ::fclose; using ::feof;
using ::ferror; using ::fflush; using ::fgetc;
using ::fgetpos; using ::fgets; using ::fopen;
using ::fprintf; using ::fputc; using ::fputs;
using ::fread; using ::freopen; using ::fscanf;
using ::fseek; using ::fsetpos; using ::ftell;
using ::fwrite; using ::getc; using ::getchar;
using ::gets; using ::perror;
using ::putc; using ::putchar;
using ::printf; using ::puts; using ::remove;
using ::rename; using ::rewind; using ::scanf;
using ::setbuf; using ::setvbuf; using ::sprintf;
using ::sscanf; using ::tmpfile; using ::tmpnam;
using ::ungetc; using ::vfprintf; using ::vprintf;
using ::vsprintf;
_STD_END
#endif /* _GLOBAL_USING */
#endif /* RC_INVOKED */
#endif /* _CSTDIO_ */
Run Code Online (Sandbox Code Playgroud)
标准C++标头不使用.h.其他所有的东西(或者更确切地说,其他所有东西都使用它想要的任何扩展名,.h,.hxx,.hpp,.hh等).
标准C标头可以包含以下两种方式之一:
#include <stdio.h>
#include <cstdio>
Run Code Online (Sandbox Code Playgroud)
第二个表单将其符号包装在std命名空间中.
最初的意图是,标题原则上可以在一些高度优化的预编译状态下存储在数据库中,在这种情况下,文件扩展的想法是没有意义的.我不知道这在实践中发生过.
小智 5
C++标准定义的头文件不需要它,它们都没有.h扩展名.C++版本stdio.h是:
#include <cstdio>
Run Code Online (Sandbox Code Playgroud)
包装stdio.h,将名称放在C++ std命名空间中,但如果您愿意,仍然可以使用C++代码中的所有C标准头文件.
编辑:将名称放在gst版本的cstdio中的std命名空间中的宏是:
_GLIBCXX_BEGIN_NAMESPACE(std)
Run Code Online (Sandbox Code Playgroud)
您可以通过尝试使用以下内容来检查您自己的标头是否应该执行以下操作:
std::printf( "hello" );
Run Code Online (Sandbox Code Playgroud)
在你的代码中.
| 归档时间: |
|
| 查看次数: |
3747 次 |
| 最近记录: |