1

我知道C 中 putc() 的宏实现,但在 C++ 中是否相同?

4

3 回答 3

3

这将取决于您对cstdio. 在大多数情况下,这实际上只是一个包装器,在命名空间stdio.h内声明包装器,并且和编译器共享相同的函数标准库。例如,VS2010 使用for ,其中既可以作为宏可以作为函数实现,具体取决于环境和其他编译时定义。stdCC++Cstdio.hC++putc

于 2012-05-23T01:50:10.213 回答
2

哪个版本的 C++?C++83(1983)?C++98(1998)?C++11(2011)?

C++98 和 C++11 规范依赖于 C 库函数的 ISO C 规范,并且不对它们施加额外的实现约束,除了一些琐碎的约束,比如将 stdio.h 重命名为 cstdio.h 并允许在没有点-h 后缀。

请参阅:C++98 规范

请参阅:C++11 规范

如果您对特定的编译器感兴趣,请查看 cstdio.h。

但是,如果我们深入研究一下 ISO C 标准:“ISO/IEC 9899:1990”(C89/C90),我们发现它无法在网络上免费查看(甚至最终草案都没有)标准),所以转到 C99(不是 ISO C),你会发现......

...C99(不是“ISO C”)说 putc() 可以实现为宏,

参见:C99 规范

因此,如果您真的在使用 Obj-C++(使用 C99)进行开发,那么 C99 是要考虑的相关规范,而不是ISO C(C90)。此外,由于 C99 让编译器编写者决定是否将 putc() 设为宏,因此您应该将其视为一种开放的可能性,并决定您是否真的关心正在过时的 C90 (ISO C) 规范(现在甚至 C11 (2011) 都出局了。)

于 2012-05-23T02:32:21.463 回答
1

是的。<stdio.h>在我知道的所有实现中,C 和 C++ 都使用了相同的方案。

于 2012-05-23T01:45:14.270 回答