为什么cstdio undef得到或其他功能

时间:2013-04-09 03:44:55

标签: c++ c

当我阅读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
  • 宏可能有一些副作用导致我们不使用,但我不能 为上面的getc(_fp)举办这样的场合。
  • 为了安全起见,也许我们可以手动隐藏fgetc而不是getc或取消宏getc
  • getcIO_getc的弱别名,当未取宏getc时 实现后,函数的别名将起作用(例如,在C ++中隐式)。

1 个答案:

答案 0 :(得分:1)

评论清楚地表明,在<stdio.h>中,getcgets 都是可以是(类似函数的)宏。 C标准当然允许这样做。无论出于何种原因,C ++ 编译器库代码都不希望宏暴露给C ++程序;它希望确保调用函数。