没有价值的回报

时间:2017-10-26 12:54:31

标签: c obfuscation c89

如果我有一个int函数,return;

int f(int val, int *hasResult) {
  if (val) {
    *hasResult = 0;
    return;
  }
  *hasResult = 1;
  return 2;
}

并将其用作

int hasResult;
int unwrapped = f(val, &hasResult);
if (hasResult) {
  printf("%d", unwrapped);
}

这是有效的C89吗?我知道它不是有效的C99 +,但我可以在C89中完全按照这样做吗?如果没有,我将如何做到这一点?

f没有副作用)

1 个答案:

答案 0 :(得分:0)

C89 draft paragraph 3.6.6.4我们发现:

  

如果执行了没有表达式的return语句,并且调用者使用了函数调用的值,行为未定义。到达终止函数的}等同于执行不带表达式的return语句。

总之,要避免,是否“合法”。