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"与否。
如果我有一个 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"与否。