【问题标题】:Whats the order of operations with respect to 'return' in CC 中关于 \'return\' 的操作顺序是什么
【发布时间】:2022-11-29 01:10:03
【问题描述】:

我对这个输出感到震惊......现在已经用 C 编写了几年代码。 有人可以解释一个可能的用例吗?似乎应该是编译器警告。

#include <stdio.h>

int chk(int var)
{
    return var++;
}

int main (void)
{
    int a = 1;

    a = chk(a);

    printf("var is: %d\n", a);

    return 0;

}

var is: 1

【问题讨论】:

  • 你为什么“震惊”,为什么你认为编译器应该发出警告?
  • 我发现这是完全可以预料的。另一方面,如果 ++var 返回 1,我会感到震惊。
  • @G.M.:绝对欢迎警告“此操作无效”。
  • 有人可以解释一个可能的用例吗?在这种情况下不是,但切换到 static 可能很有用:int chk(void){static int var = 1; return var++;} 返回函数被调用的次数 :)
  • @David Ranieri;一些硬件领域的巫术

标签: c operator-precedence


【解决方案1】:

您不能将运算符放在返回值中,编译器可能不会说有错误,但它只会忽略运算符。改用这个:

#include <stdio.h>

int chk(int var)
{
    var++;
    return var;
}

int main (void)
{
    int a = 1;

    a = chk(a);

    printf("var is: %d
", a);

    return 0;

}

【讨论】:

  • 你不能把操作员放在回报中——荒唐。编译器将忽略它们-- 试试return var + 1;return ++var;
  • 此外,您可以输入 ++var,它会返回 2,所以不会。没有被忽视。
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2012-12-06
  • 2011-01-16
  • 2010-10-14
  • 2023-01-02
  • 1970-01-01
相关资源
最近更新 更多