Return 没有价值

Return with no value

如果我有一个 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 没有副作用)

C89 draft paragraph 3.6.6.4中我们发现:

If a return statement without an expression is executed, and the value of the function call is used by the caller, the behavior is undefined. Reaching the } that terminates a function is equivalent to executing a return statement without an expression.

总之,要避免,不管"legal"与否。