gpt4 book ai didi

c++ - 为什么cstdio undef获取或其他功能

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:39 26 4
gpt4 key购买 nike

当我读到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手动。
  • getcIO_getc 的弱别名,当宏getc没有被采取生效后,函数的别名将起作用(例如,在 C++ 中隐式地)。

最佳答案

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

关于c++ - 为什么cstdio undef获取或其他功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com