【问题标题】:Is this a valid C command/instruction?这是一个有效的 C 命令/指令吗?
【发布时间】:2011-03-01 18:25:02
【问题描述】:

我正在查看其他人所做的一些代码,我看到了这个:

            if (numDetects == 0) {

                Table[Index].minF = 

            Table[Index].maxF = F;

            }

Table[Index].minF = blank 对我来说没有任何意义。我这辈子从未见过这种情况。但是代码确实可以编译并运行,所以有人可以向我解释这是否可能,是否只保留一个等号挂在那里?谢谢!

【问题讨论】:

    标签: c syntax


    【解决方案1】:

    是的; C 不关心第一行和第二行之间的空白,所以它认为它是

    Table[Index].minF = Table[Index].maxF = F;
    

    在语法上等价于

    Table[Index].minF = (Table[Index].maxF = F);
    

    因为赋值运算符= 不仅将左边赋值给右边,而且返回被赋值的值。在这种情况下,该返回值将依次分配给外部左侧。

    【讨论】:

    • 这让我回来了。早期 PC 编译器中的一个错误将 ( ) 内的赋值解释为测试,因此将返回 true - 因为赋值发生了! - 所以将 minF 设置为 1
    【解决方案2】:

    是的,这与:

    Table[Index].minF = Table[Index].maxF = F;
    

    赋值运算符 (=) 可以像任何其他运算符一样被链接。它从右到左进行评估,每次评估都返回分配的值。所以这相当于下面两条语句。

    Table[Index].maxF = F;
    Table[Index].minF = Table[Index].maxF;
    

    【讨论】:

      【解决方案3】:

      空白并不重要。这行真的写着

      Table[Index].minF = Table[Index].maxF = F;
      

      相当于

      int a;
      int b;
      
      a = b = 0;
      

      【讨论】:

        【解决方案4】:

        相当于:

        Table[Index].minF = Table[Index].maxF = F;
        

        【讨论】:

          【解决方案5】:

          空白被忽略,其全部评估为...

          Table[Index].minF = Table[Index].maxF = F;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-22
            • 1970-01-01
            • 2013-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多