- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在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
也能正常工作对于 c1
和c2
。不过,我还没有真正尝试过以这种方式更改和测试它......
此外,如果您返回 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/
在linux源代码版本3.18(及之前)中,在string.c文件中,在函数strncasecmp中,第一件事是: /* Yes, Virginia, it had better be unsigne
我是一名优秀的程序员,十分优秀!