【问题标题】:return- and return! in C返回 - 并返回!在 C 中
【发布时间】:2014-01-04 07:52:58
【问题描述】:

在查看代码高尔夫问答部分中的谜题和答案时,我遇到了this solution 最长和最晦涩的返回 1 方式

引用答案,

int foo(void) {
    return! 0;
}

int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}

-->“运算符”已经众所周知:),但我在 return! 0;return-x; 上找不到任何信息,我猜 x 可能是任何变量

它们真的存在吗?它们是什么意思?跟优先级有关系吗?

【问题讨论】:

  • 没有 --> 运算符。它是 (i--) > 0。他们只是想通过玩间距来变得晦涩难懂。返回! 0 是返回 (!0)。 return -i 是 return (-i)
  • 在这里和那里插入一些空格。这与优先级无关。

标签: c


【解决方案1】:

这与--> 的想法完全相同。 C 编译器 tokenize 程序文本使用 particular algorithm 使得

return-i

类似解析

return -i

return! 0

类似解析

return !0

都一样。

【讨论】:

    【解决方案2】:

    !- 用于“第二部分运算符”,它们与return 没有任何关系。

    return-x; 只是 returns 的否定值 x

    return! 0;return (!0);,没什么特别的。

    【讨论】:

    • 啊,谢谢。担心“返回”优先的前景,即使返回是一个声明:p
    【解决方案3】:

    符号return! 0 可以解释为return (!0),基本上就是return 1

    另一个符号return -x,其中x 等于-1(因为while (x --> 0); 只是return 1

    【讨论】:

      【解决方案4】:

      return!0;return (!0);!0 == 1 相同。

      对于第二个,return-i 返回1,因为此时i==-1(在while 循环将其减为-1 之后),并且return-ireturn (-i)return 1 相同。

      【讨论】:

      • 它 -(-1) 即 1..?你的意思是 i=-1 而不是 i==-1?
      • @Digital_Reality 我认为 mvp 只是在解释 i 的值为 -1 时说 ==,而不是在代码中执行 i==-1 的比较
      【解决方案5】:

      间距可能会让你失望:

      return !0;
      

      基本上是使 0 非 0,或“真”,1。

      "-->" 不是"an" 运算符,它是2 个运算符:decrement&save-later "--" 和 compare ">"

      i--> 0,或者查看 i 是否仍然大于 0,然后将其递减。它的用法是将 i 从 7 递减直到变为 0(比较后递减为负数,第一次出现为 -1)

      return -i;
      

      只是将 -1 变成正 1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2015-01-18
        • 2012-01-16
        相关资源
        最近更新 更多