当我阅读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
实际上是一个函数,为什么unf一个函数?
可能在某个系统中它都是用宏实现的吗?
更新
我试着理解<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
fgetc
而不是getc
或取消宏getc
。 getc
是IO_getc
的弱别名,当未取宏getc
时
实现后,函数的别名将起作用(例如,在C ++中隐式)。答案 0 :(得分:1)
评论清楚地表明,在<stdio.h>
中,getc
和gets
都是可以是(类似函数的)宏。 C标准当然允许这样做。无论出于何种原因,C ++ 编译器库代码都不希望宏暴露给C ++程序;它希望确保调用函数。