如果我memcmp
为其第一个和第二个参数传递相等的指针,我怀疑它可能只返回 0 而不检查元素——因为如果传递相同的指针,则元素必须为零。在我看来,检查指针是否相等并提前退出是一个很好的优化。
我检查了glibc 和Free BSD LibC 实现,似乎都没有进行这种优化。
所以我检查了标准(如下):C99 的开放标准草案版本没有任何方式说明:
7.21.4.1 memcmp 函数概要
#include <string.h> int memcmp(const void *s1, const void *s2, size_t n);
描述
memcmp 函数将 s1 指向的对象的前 n 个字符与 s2 指向的对象的前 n 个字符进行比较。
退货
memcmp 函数返回一个大于、等于或小于零的整数,相应地,因为 s1 指向的对象大于、等于或小于 s2 指向的对象
据我所知,它并没有禁止这样的“技巧”,因为仍然会得到相同的返回值。这确实是一个实现细节,AFAICT。
显然,编写这些库的人在这方面的思考比我多得多,所以可能有充分的理由不这样做。它是什么?