这个function在这里找到。 这是strcmp
的一个实现:
int strcmp(const char* s1, const char* s2) { while (*s1 && (*s1 == *s2)) s1++, s2++; return *(const unsigned char*)s1 - *(const unsigned char*)s2; }
我理解除了最后一行之外的所有内容,简言之,最后一行是怎么回事?
return *(const unsigned char*)s1-*(const unsigned char*)s2;
OP:简言之,最后一行是怎么回事?
答:比较第一个潜在的字符串差异。 根据规范的要求,两个chars
都被引用为unsigned char
。 2被提升为int
并返回差异。
笔记:
1返回值的符号(<0,0,> 0)是最有意义的部分。 它是C规范中唯一指定的部分。
2在某些系统上, char
已signed
(更常见)。 在其他人, char
是unsigned
。 定义最后一次比较的“符号”可以提高可移植性。 请注意, fgetc()
字符作为unsigned char
获取。
3除了字符串以