📜  编写一个在C和C++中产生不同结果的程序(1)

📅  最后修改于: 2023-12-03 15:11:42.157000             🧑  作者: Mango

编写一个在C和C++中产生不同结果的程序

本文介绍一个简单的程序,它在C和C++中会产生不同的结果。

代码

以下是示例代码:

#include <stdio.h>

int main() {
    int i = 0;
    printf("%d %d %d\n", ++i, i++, i);
    return 0;
}
#include <iostream>

int main() {
    int i = 0;
    std::cout << ++i << " " << i++ << " " << i << std::endl;
    return 0;
}
分析

这个程序的核心代码是一行输出语句:

printf("%d %d %d\n", ++i, i++, i);

这行语句包含了三个参数:++ii++i。它们的含义分别是:

  • ++i:先把变量i自增1,然后返回自增后的值。
  • i++:先返回变量i的值,然后再把i自增1。
  • i:变量i的当前值。

这个语句的执行顺序在C和C++中是不一样的。在C中,函数参数的计算顺序是未定义的,即编译器可以自由地决定参数的计算顺序。而在C++中,函数参数的计算顺序是从左到右的。因此,这个程序在C和C++中会得到不同的结果。

在C中,输出结果是:

1 1 0

解释:++i先把i自增1变成1,然后返回自增后的值1;i++返回i的当前值1,但不会立即自增;i的值为1。

在C++中,输出结果是:

1 0 1

解释:++i先把i自增1变成1,然后返回自增后的值1;i++返回i的当前值1,但不会立即自增;i的值为2。

总结

本文介绍了一个简单的程序,它在C和C++中会产生不同的结果。这个例子展示了C和C++在函数参数计算顺序方面的差异。在编写程序时应注意这些细节,以避免因这种差异导致的错误。