当像这样 (++i)++ 这样放在一个变量上时,预递增和 post 递增,它在 c++ 中有效,但在 c 中无效

Pre increment and post increment when put together on a single variable like this (++i)++, it works in c++ but not in c

我用值 3 初始化了一个变量 i,然后在我的代码中放了一条语句 (++i)++。但是,在 C 中,它显示错误 "lvalue required as increment operand"。但是,如果我将这段类似的代码放在 C++ 中,它会工作并显示输出 5 的双增量。但是,我的一个朋友尝试使用 c 编译器,它给出了输出 4。

//using c

#include <stdio.h>

int main()
{
    int i=3;
    (++i)++;
    printf("%d",i);
    return 0;
}
 //using c++

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int i=3;
    (++i)++;
    cout << i << endl;
    return 0;
}

我正在使用 GNU GCC 编译器。

已知这是未定义的行为。从语法上讲,这个程序在 C++ 中是正确的,编译器会生成一些二进制代码……但标准允许它生成任何代码,甚至是 returns 100 或格式化磁盘的代码。在实际情况下你可能会观察到非常奇怪的异常情况,例如编译器可以在你的 (++i)++ 语句之后丢弃整个代码,因为标准允许它在程序进入 UB 状态后立即为所欲为。在您的情况下,这意味着根本没有输出(或者程序将打印 "Hello World" 而不是整数值)。

我相信你只是在做一个实验。结果是:你的编译器和你朋友的编译器都是正确的。