gpt4 book ai didi

string - "Yes, Virginia, it had better be unsigned"是什么意思?

转载 作者:行者123 更新时间:2023-12-02 10:58:58 27 4
gpt4 key购买 nike

在linux源代码版本3.18(及之前)中,在string.c文件中,在函数strncasecmp中,第一件事是:

/* Yes, Virginia, it had better be unsigned */
unsigned char c1, c2;

如下所示:http://lxr.free-electrons.com/source/lib/string.c

这是什么意思?

最佳答案

string.c:strncasecmp()来电 __tolower来自include/linux/ctype.h预计 unsinged char .

编辑添加:一般来说,您总是想通过 unsigned char到 ctype.h 函数 because of C Standard §7.4, which says the behavior is undefined if the argument to ctype.h functions is not representable as unsigned char or EOF .这可能解释了"Yes, Virginia"一点。

比较神秘的是include/linux/ctype.h实际上在这方面看起来是防白痴的,因为它有自己的 safety-minded cast#define __ismask(x) (_ctype[(int)(unsigned char)(x)]) 。我不确定何时相对于另一行添加“是的,弗吉尼亚”评论,但使用当前版本的 include/linux/ctype.h看来string.c:strncasecmp()即使使用 char 也能正常工作对于 c1c2 。不过,我还没有真正尝试过以这种方式更改和测试它......

此外,如果您返回 Linux 2.0.40's ctype.h ,安全意识强的 Actor 阵容((int)(unsigned char))已经不复存在了。 2.0.40's string.c 中也没有“弗吉尼亚”评论,但甚至没有 strncasecmp在里面。看起来这两个更改都是在 Linux 2.0 和 2.2 之间进行的,但我现在无法告诉您更多信息,哪个先出现,等等。

关于string - "Yes, Virginia, it had better be unsigned"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062077/

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