Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么创建这个比较器会给我这样的信息:“quot;-控件可能会到达非无效函数的末尾[-Wreturn type]”;警告_C_Eclipse_Scope_Comparator - Fatal编程技术网

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上再次运行代码第一个版本之后的第二个版本后,警告消失了。谢谢各位。我认为这只是我选择重建和编写代码的顺序问题。