bsearch 的 compar 回调函数只需要实现相等?

The compar callback function for bsearch needs only implementation of equality?

来自 cppreference,

To perform the search, the function performs a series of calls to compar with key as first argument and elements of the array pointed to by base as second argument.

对于给定的数组 int arr[] = {1, 2, 3, 4, 5, 6, 7},搜索元素 6 您需要将回调函数传递给 bsearch。我的 int compar (const void* pkey, const void* pelem); 函数是否需要能够return以下三种情况之一:

或者仅仅为了相等而实现 compar 函数就足够了(例如 return 0 当搜索值等于当前元素时)?

您的比较函数必须 return 所有可能输入的正确 return 值。此外,向量必须与比较函数一致地排序:如果值 a 在向量中出现在 b 之前,则 compar(&a, &b) 必须小于或等于 0。 bsearch 不检查,但如果不是这种情况,bsearch 可能会 return 错误的结果。或者更糟。

无论如何,不​​可能实现仅有时 return 是一个值的函数,如果这就是您的意思。除非不使用函数的 return 值,否则函数必须 return 一些东西。 C 并没有强制执行这个要求,但是如果你忽略它,你的程序就会有未定义的行为,这意味着会发生不好的事情。