C 为什么创建这个比较器会给我这样的信息:“quot;-控件可能会到达非无效函数的末尾[-Wreturn type]”;警告
我不明白为什么会出现警告,因为返回值不在条件循环中。必须至少执行一条语句,从而返回某些内容。 代码如下:C 为什么创建这个比较器会给我这样的信息:“quot;-控件可能会到达非无效函数的末尾[-Wreturn type]”;警告,c,eclipse,scope,comparator,C,Eclipse,Scope,Comparator,我不明白为什么会出现警告,因为返回值不在条件循环中。必须至少执行一条语句,从而返回某些内容。 代码如下: int qsort_compare (const void * a, const void * b){ if (*(char *)a == *(char *)b) { return 0; } else if (*(char *)a > *(char *)b) { return 1; } else {
int qsort_compare (const void * a, const void * b){
if (*(char *)a == *(char *)b) {
return 0;
}
else if (*(char *)a > *(char *)b) {
return 1;
}
else {
return -1;
}
}
我认为这可能是一个范围问题,因此我将其更改为此,从而解决了警告:
int qsort_compare (const void * a, const void * b){
int val;
if (*(char *)a == *(char *)b) {
val = 0;
}
else if (*(char *)a > *(char *)b) {
val = 1;
}
else {
val = -1;
}
return val;
}
然而,有人能解释为什么if-elseif-else结构允许出现警告吗?特别是,为什么系统的设计不能理解我在至少一个if-elseif-else语句中返回了一些东西?不确定您的问题,但您可以大大简化它:
return(*(char*)a)-(char*)b)
@Amit:在这种情况下很可能没问题,但我使用gcc-c-Wall-Wextra-pedantic-Wconversion-std=gnu99编译了最初发布的代码,并且编译时没有任何错误或警告。你是否真的通过复制粘贴发布了真实的代码,或者这是你在问题中输入的东西?这是复制粘贴的真实代码。奇怪的是,在gcc上再次运行代码第一个版本之后的第二个版本后,警告消失了。谢谢各位。我想这只是我选择重建和编写代码的顺序问题。我不确定你的问题,但你可以大大简化它:return(*(char*)a)-(char*)b)
@Amit:在这种情况下很可能没问题,但我使用gcc-c-Wall-Wextra-pedantic-Wconversion-std=gnu99编译了最初发布的代码,并且编译时没有任何错误或警告。你是否真的通过复制粘贴发布了真实的代码,或者这是你在问题中输入的东西?这是复制粘贴的真实代码。奇怪的是,在gcc上再次运行代码第一个版本之后的第二个版本后,警告消失了。谢谢各位。我认为这只是我选择重建和编写代码的顺序问题。