【问题标题】:c - if + else if + else in one line? [duplicate]c - if + else if + else 在一行? [复制]
【发布时间】:2018-03-14 09:15:13
【问题描述】:

在误解了朋友的陈述后,我刚刚得到了一个问题的想法。

我的朋友告诉我:我刚刚教了一位同事如何在 c 中的一行中执行 if/else。

例子:

int i = 0;
i < 0 ? printf("i is below 0") : printf("i is over or equal to 0");

目前,没有什么新东西,它被称为三元,大多数人都知道这种说法,但我首先理解的是:

我刚刚教了一位同事如何在一行中执行 IF / ELSE IF / ELSE。 因为我不/不知道做这样的事情是可能的,所以我尝试做类似的事情

int i = 0;
 i < 0 ? printf("i is below 0") : i == 0 ? printf("i equal 0") : printf("i is over 0");

是否真的可以做一个 if / else if / else “三元”。或者有没有办法在没有一段可怕的代码的情况下做这样的事情?

【问题讨论】:

  • 这与您的问题无关,但从技术上讲,您可以在一行上使用 if else if else 语句而不使用三元任何东西。当然这很荒谬,但三元组不存在只是因为它在一条线上。它的语法和可读性方便。所以不要过分强调“一行”编译器不在乎你是否将所有内容放在一行或用空格以某种方式格式化它。即使您已经知道这一点,我也只是想添加它。相信我很多不。祝你好运
  • C 忽略所有不需要分隔预处理标记的空白字符。什么是“单行”做事的伟大“美德”?您也可以在一行中执行if 语句。
  • 函数printf返回一个值,但是当调用一个没有返回值的函数时,您的代码将毫无意义。
  • “一行”没有任何好处。相反,您应该专注于编写可读且快速的代码。
  • 添加/修改@Lundin 上面所说的,它有负面的好处。任何使用调试器单步执行代码以试图找到一些难以捉摸的错误的开发人员都会看到这些“聪明”的单行代码,并希望嗯……对作者来说是“非常糟糕的事情”。

标签: c if-statement


【解决方案1】:

如果你看到例如this conditional expression reference可以看到“三元表达式”的格式是

condition ? expression-true : expression-false

条件表达式的所有三个部分依次是表达式。这意味着您几乎可以拥有任何种表达式,包括其中的嵌套条件(三元)表达式。

【讨论】:

    【解决方案2】:

    这绝对是有效的。

    或者你可以试试这样的 -

    printf(i < 0 ? "i is below 0" : i == 0 ? "i equal 0" : "i is over 0");
    

    【讨论】:

      【解决方案3】:

      C 有语句和表达式。有两种不同的语法事物。 BTW 行在 C 中并不重要(预处理器除外)。

      表达式(如f(1,x+y) 甚至x=y++)是一种特殊的语句(最常见的语句)。

      作为 C 的扩展,GCC 编译器添加了statement expressions,超出了C11 标准(阅读n1570)定义的范围。请下载并阅读n1570报告。

      if 用于条件语句,但ternary ?: operator 用于表达式(所有三个操作数都是子表达式)。

      一些编程语言(特别是 Lisp、Haskell、Scheme、Ocaml)只有表达式,没有任何语句。

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 2015-05-16
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2014-08-08
        • 1970-01-01
        • 2012-11-02
        相关资源
        最近更新 更多