为什么不能在 C++ 中将 putc() 实现为宏? 或者可以吗?

问题描述

在 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 的定义