C和c++有很多不同之处,并不是所有有效的C代码都是有效的c++代码。
(这里的“有效”指的是具有定义行为的标准代码,即不是特定于实现的/未定义的/等等。)
在哪种情况下,一段在C和c++中都有效的代码在使用每种语言的标准编译器编译时会产生不同的行为?
为了做一个合理/有用的比较(我试图学习一些实际有用的东西,而不是试图在问题中找到明显的漏洞),让我们假设:
与预处理器无关(这意味着没有使用#ifdef __cplusplus、pragmas等进行hack)
在这两种语言中,任何实现定义都是相同的(例如数字限制等)。
我们比较每个标准的最新版本(例如,c++ 98和C90或更高版本)
如果版本很重要,那么请说明每个版本会产生不同的行为。
struct abort
{
int x;
};
int main()
{
abort();
return 0;
}
在c++中返回退出码为0,在C中返回退出码为3。
这个技巧可能可以用来做一些更有趣的事情,但我想不出一个好方法来创建一个构造函数,让c满意。我试着用复制构造函数做了一个同样无聊的例子,让一个参数被传递,尽管以一种相当不可移植的方式:
struct exit
{
int x;
};
int main()
{
struct exit code;
code.x=1;
exit(code);
return 0;
}
vc++ 2005拒绝在c++模式下编译,但是,抱怨如何重新定义“退出代码”。(我认为这是一个编译器错误,除非我突然忘记了如何编程。)但是当它被编译成C语言时,进程退出码为1。