Why can't putc() be implemented as a macro in C++? (Or can it?)

ple*_*ndo 4 c++ stdio language-lawyer

在 fputc()/putc() 上阅读en.cppreference.com,我偶然发现了以下语句:

在 C 中,putc() 可以作为宏实现,这在 C++ 中是不允许的。

这是真的?如果是这样,这是在哪里(在 C++ 标准中)说明的?

可能相关:https : //stackoverflow.com/questions/10712423

Mik*_*ski 7

putc 在 C 标准中被指定为一个函数:

7.19.7.8 putc 函数

C 标准允许将任何 C 标准库函数实现为宏(仍然需要提供真正的函数实现,但如果在头文件中定义了宏,则将使用该宏):

7.1.4 库函数的使用

头文件中声明的任何函数都可以额外实现为类似函数的宏

但是 C++ 标准明确指出这些必须定义为函数:

17.4.1.2.6 标题

在 C 中定义为函数的名称应在 C++ 标准库中定义为函数。

脚注明确说明不允许额外的宏定义:

这不允许在 C 中允许的实践,除了提供函数原型之外,还提供“屏蔽宏”。在 C++ 中实现等效的“内联”行为的唯一方法是提供一个作为 extern inlin 的定义