当我阅读libstdc++-v3/include/c/cstdio时,我对以下几行感到非常困惑:
//Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef getc
#undef gets
我认为这getc
是一个宏但gets
实际上是一个函数,为什么 undef 一个函数?可能在某些系统中它都是在宏中实现的?
更新:
我试着把我的理解<stdio.h>
和<cstdio> here
<stdio.h>=
__BEGIN_NAMESPACE_STD
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);
__END_NAMESPACE_STD
#define getc(_fp) _IO_getc (_fp)
<cstdio>=
#undef getc
- 宏可能有一些副作用导致我们不使用,但我不能为上面的 getc(_fp) 提出这样的场合。
- 为了安全起见,也许我们可以手动
fgetc
调用getc
或取消宏getc
。 getc
是 的弱别名IO_getc
,当宏getc
不生效时,函数的别名将起作用(例如,在 C++ 中隐式)。