首页 > 解决方案 > 将前增量和后增量放在像这样 (++i)++ 这样的单个变量上时,它在 c++ 中有效,但在 c 中无效

问题描述

我用值 3 初始化了一个变量 i,然后在我的代码中添加了一个语句 (++i)++。但是,在 C 中,它显示错误“需要作为增量操作数的左值”。但是,如果我将这个类似的代码放在 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++cincrement

解决方案


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

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


推荐阅读