c - 为什么表达式 a==--a true 在 if 语句中?

标签 c post-increment pre-increment

<分区>

    #include <stdio.h>

    int main()
    {
        int a = 10;
        if (a == a--)
            printf("TRUE 1\t");
        a = 10;

        if (a == --a)
            printf("TRUE 2\t");
    }

为什么第二个 if 语句为真?

输出是: 对 1 对 2

这是由于未定义的行为而发生的吗,因为我正在比较相同的变量及其递减值?

最佳答案

正确,条件计算为 true,因为您看到了未定义的行为:如果在表达式中使用带有具有副作用的运算符的变量,则在表达式中再次使用相同的变量是非法的没有序列点的表达式(== 没有序列点)。

这是因为编译器可以在任何时候随意应用 -- 的副作用,只要计算表达式时使用的值是正确的(即值后缀表示法减量前,或前缀表示法减量后的值)。

关于c - 为什么表达式 a==--a true 在 if 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350436/

相关文章:

java - Java 中的后自增 (i++) 和预自增 (++i) 运算符如何工作?

lambda - 使用 lambda 表达式的后缀与前缀递增

c - 无法在 win32 项目中包含 ntifs.h

检查 pthread_cond_t 的值

Java:操作顺序、增量后澄清

c - 使用 i++(或++i)真的是一个好习惯吗?

c++ - 后增量和前增量概念?

c - 为什么这个数组以一种奇怪的方式被初始化?

c++ - "Memory allocated at compile time"的真正含义是什么?

C++ 递增指针