C++中非空函数不返回任何内容 [英] return nothing from non-void function in C
本文介绍了C++中非空函数不返回任何内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下代码段中被认为是最佳实践的是什么:
int foo(struct data *bar, struct info bla) {
if (!bar) {
bla->status = 0;
return;
}
...
}
事实上,它工作得很好。但我对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;
}
推荐答案
最佳实践不是这样编写代码。如果此时不能返回某种类型的整数,则需要重新设计代码。请注意,所编写的函数将向调用代码返回某种值-您只是不知道该值将是什么。
解决此问题的经典方法是通过指针参数返回值,而实际函数返回状态:
int f( int * p ) {
if ( bad ) {
return 0; // fail indicator
}
else {
* p = 42; // integer return value
return 1; // success indicator
}
}
编辑:在您发布的代码中,您正在操作堆栈。对于我所知道的所有堆栈,弹出空栈都是未定义的行为,所以您可以只返回您喜欢的任何整数(我会返回0)并记录该行为。
这篇关于C++中非空函数不返回任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文