gue*_*est 4 c gcc warnings return
在以下代码段中被认为是最佳做法:
int foo(struct data *bar, struct info bla) {
if (!bar) {
bla->status = 0;
return;
}
...
}
Run Code Online (Sandbox Code Playgroud)
事实上,它工作正常.但是在gcc给我一个警告时我感到很不舒服.
这是实际的代码:
static int pop(struct stack **stack, struct info *info) {
int ret;
struct stack *tmp;
if (!*stack) {
info->error = 0;
return;
}
ret = (*stack)->data;
tmp = *stack;
*stack = (*stack)->next;
free(tmp);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
小智 12
最佳做法是不要编写类似的代码.如果此时无法返回某种整数,则需要重新设计代码.请注意,写入的函数将向调用代码返回某种值 - 您只是不知道该值是什么.
这种经典的方法是通过指针参数返回值,实际函数返回一个状态:
int f( int * p ) {
if ( bad ) {
return 0; // fail indicator
}
else {
* p = 42; // integer return value
return 1; // success indicator
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在您发布的代码中,您正在操纵堆栈.弹出空堆栈是我所知道的所有堆栈的未定义行为,因此您可以返回任何需要您想要的整数(我将返回0)并记录该行为.