gpt4 book ai didi

c++ - 在 Xcode 中,我在代码片段中发现了语义问题

转载 作者:太空狗 更新时间:2023-10-29 23:38:49 24 4
gpt4 key购买 nike

程序试图编译,但我发现错误显示,'control may reach end of non-void function'。我想在放置返回比较后如何处理 if 条件。我一直在想办法解决这个问题。

   int compare(const void *a, const void *b)
{
if (*(int *)a < *(int *)b)
return -1;
if (*(int *)a == *(int *)b)
return 0;
if (*(int *)a > *(int *)b)
return 1;
}

最佳答案

不应检测到“控件可能到达非空函数的末尾”,因为实际上不存在这种可能性。可能是数据流分析没有正确检测到这一点。

但是,有一个更好的替代方案来实现它,它也可以解决您的问题:

int compare(const void *a, const void *b)
{
return (*(const int*)b < *(const int*)a) - (*(const int*)a < *(const int*)b);
}

顺便说一句。这段代码的性能更好,因为您不再需要任何分支。

用于演示的小型 MCVE:

#include <iostream>

int compare(const void *a, const void *b)
{
return (*(const int*)b < *(const int*)a) - (*(const int*)a < *(const int*)b);
}

int main()
{
int a = 1, b = 2;
std::cout << "compare(&a, &b): " << compare(&a, &b) << '\n';
std::cout << "compare(&b, &a): " << compare(&b, &a) << '\n';
std::cout << "compare(&a, &a): " << compare(&a, &a) << '\n';
return 0;
}

输出:

compare(&a, &b): -1
compare(&b, &a): 1
compare(&a, &a): 0

Live Demo on coliru

我必须承认,当我回答时,有人“强制”我使用这个漂亮的比较技巧

SO: Sorting an array of integers in alternate fashion using qsort function. .

这是我在那里给出的解释:

How it works:

In case a < b: (a > b) - (a < b)0 - 1-1

In case a == b: (a > b) - (a < b)0 - 00

In case a > b: (a > b) - (a < b)1 - 01

关于c++ - 在 Xcode 中,我在代码片段中发现了语义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com