你怎么称待在有条件的情况下做作业?

时间:2017-10-18 18:11:10

标签: objective-c c conditional-statements variable-assignment terminology

在条件中进行作业是否有特殊名称?以下是我在C中询问的一个例子:

// Assume a and b have been previously defined and are compatible types
if( (a = b) ) {  // <- What do you call that?
  //do something
}

我的几个朋友和我确信它有一个名字,其他一些人已经同意有一个,但我们无法在任何地方找到它。这里有没有人听过这个词?

3 个答案:

答案 0 :(得分:1)

虽然人们称之为各种各样的东西,但它并没有真正的名字。如果代码遵循您的问题:

if( a = b )...

然后常见术语是: bug 错误等。但是,如果b不是变量而是表达式,例如与常见的C模式一样:

if( (c = getchar()) != EOF )...
while( *q++ = *p++ )...

然后它可能被称为成语模式等。

答案 1 :(得分:1)

假设某项作业是故意的,则没有特殊名称。 C语言规范对if语句的控制表达式提出了非常弱的要求:

  

6.8.4.1-1: if语句的控制表达式应具有标量类型。

只要ab是标量,赋值表达式就满足此要求。对此赋值的结果执行与零的隐式比较:

  

6.8.4.1-2:在两种形式中,如果表达式将une等于0,则执行第一个子语句。在else表单中,如果表达式比较等于0,则执行第二个子语句

请注意,编译器会在看到类似的分配时发出警告,因为缺少第二个=是常见的错误来源。 You can prevent these warnings using parentheses, as described in this Q&A

答案 2 :(得分:0)

我不知道它是否有名字,但我称之为“无人理解的有用功能”。 它确实非常有用。 我们可以认为它是俚语。

例如,在C ++中,您可以通过直接声明变量来使用它,这对于安全检查非常有用:

if(Object * a = takeObject()){         // a不是nullptr    }

或者当我不想在循环中重复声明时:

while (a = next()) {

}

而不是:

a = next();
while (a) {

   a = next();
}

但通常这些只是错误,像gcc和clang这样的编译器会发出警告(并且它们会强迫你使用一个可怕的双重元组来使警告静音!)。