這工作:何時.h不需要包含頭文件?
#include <iostream>
using namespace std;
但這種失敗:當不需要
#include <stdio>
.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_ */
也許看看命名空間聲明的宏_STD_BEGIN和_STD_END。 – 2010-03-28 09:47:39
我不知道這個宏如何正確工作,但似乎它不包裹'stdio.h'? – user198729 2010-03-28 09:50:55
'_STD_BEGIN'和'_STD_END'之間的'using'語句將這些名稱導入std名稱空間。他們現在可以作爲'size_t'和'std :: size_t'(不要問我爲什麼應該保持全局可見)。 - C++版本有其他區別。例如,看起來有些東西是C庫中的宏,C++將其重新定義爲普通函數。另外''各種增加對重載函數(C中沒有超載)等 –
UncleBens
2010-03-28 10:22:43