C和C++有很多不同,并不是所有有效的C代码都是有效的C++代码。
(“有效”是指具有已定义行为的标准代码,即不是特定于实现/未定义/等)
在任何情况下,当使用每种语言的标准编译器编译时,一段代码在 C 和 C++ 中都有效会产生不同的行为?
为了使它成为一个合理/有用的比较(我试图学习一些实际有用的东西,而不是试图在问题中找到明显的漏洞),让我们假设:
- 没有与预处理器相关的东西(这意味着没有
#ifdef __cplusplus
、pragma 等的 hack) - 任何实现定义的内容在两种语言中都是相同的(例如数字限制等)
- 我们正在比较每个标准的最新版本(例如,C++98 和 C90 或更高版本)
如果版本很重要,请说明每个版本的哪些版本会产生不同的行为。
最佳答案
下面的例子利用了 C 和 C++ 中函数调用和对象声明之间的差异,以及 C90 允许调用未声明的函数这一事实:
#include <stdio.h>
struct f { int x; };
int main() {
f();
}
int f() {
return printf("hello");
}
在 C++ 中,这不会打印任何内容,因为会创建和销毁临时 f
,但在 C90 中,它将打印 hello
,因为可以在未声明的情况下调用函数。
如果您想知道名称 f
被使用了两次,C 和 C++ 标准明确允许这样做,并且要创建一个对象,您必须说 struct f
如果你想要结构来消除歧义,或者如果你想要函数则不用 struct
。
关于c++ - 在 C 和 C++ 中都有效的代码在用每种语言编译时会产生不同的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887700/