问题描述
在 fputc()/putc() 上阅读 en.cppreference.com,我偶然发现了以下语句:
在 C 中,putc() 可以作为宏实现,而在 C++ 中是不允许的。
这是真的吗?如果是这样,(在 C++ 标准中)是在哪里说明的?
可能相关:https://stackoverflow.com/questions/10712423
解决方法
putc
在 C 标准中被指定为函数:
7.19.7.8 putc 函数
C 标准允许将任何 C 标准库函数实现为宏(仍然需要提供真正的函数实现,但如果在头文件中定义了宏,则将使用宏):
7.1.4 库函数的使用
在头文件中声明的任何函数都可以额外实现为类似函数的宏
但是 C++ 标准明确规定这些必须定义为函数:
17.4.1.2.6 标题
在 C 中定义为函数的名称应在 C++ 标准库中定义为函数。
脚注明确说明不允许额外的宏定义:
这不允许在 C 中允许的做法,即除了函数原型之外还提供“屏蔽宏”。在 C++ 中实现等效的“内联”行为的唯一方法是提供一个作为 extern inlin 的定义