从手册页:
如果发现 s1(或其前 n 个字节)分别小于、匹配或大于 s2,则 strcmp() 和 strncmp() 函数返回一个小于、等于或大于零的整数.
C 中的示例代码(-15
在我的机器上打印,交换 test1 和 test2 反转值):
#include <stdio.h>
#include <string.h>
int main() {
char* test1 = "hello";
char* test2 = "world";
printf("%d\n", strcmp(test1, test2));
}
我发现这段代码(取自这个问题)依赖于 strcmp 的值,而不是 -1、0 和 1(它使用中的返回值qsort
)。对我来说,这是一种糟糕的风格,并且取决于未记录的功能。
我想我有两个相关的问题:
- C 标准中是否有定义返回值除了小于、大于或等于零之外的内容吗?如果不是,标准实现是做什么的?
- Linux、Windows 和 BSD 的返回值是否一致?
编辑:
离开我的电脑 5 分钟后,我意识到有问题的代码实际上没有错误。我在阅读评论/答案之前删除了我想出的部分,但我把它们留在那里以保持评论的相关性。我认为这仍然是一个有趣的问题,并且可能会导致习惯于总是返回 -1、0 或 1 的其他语言的程序员打嗝(例如 Python 似乎这样做,但它没有以这种方式记录)。
FWIW,我认为依赖记录行为以外的东西是不好的风格。