我读了一些代码,然后走了过来,而这个神秘的语法:c:这条线是做什么的?
size_t count = 1;
char *s = "hello you";
char *last_word = "there";
count += last_word < (s + strlen(s) - 1); #line of interest
计数递增,不知何故。但我认为<运算符会返回true或false。 这条线是做什么的?
我读了一些代码,然后走了过来,而这个神秘的语法:c:这条线是做什么的?
size_t count = 1;
char *s = "hello you";
char *last_word = "there";
count += last_word < (s + strlen(s) - 1); #line of interest
计数递增,不知何故。但我认为<运算符会返回true或false。 这条线是做什么的?
作为每operator precedance表,<
结合高于+=
操作者,所以代码基本上是
count += (last_word < (s + strlen(s) - 1)) ;
其中,所述(A < B)
的计算结果为0或1 注,因此,最后,它减少到
count += 0;
或
count += 1;
注:相关的 “1
或0
” 的一部分,报价C11
,章§6.5.8/ P6,关系运算符
每个运营商
<
的(小于), (大于),<=
(小于或等于)和>=
(大于或等于)将产生1
如果指定的关系是true
和0
如果它是false
。 107)结果的类型为int
。
在C中有一个stdbool.h
标题,它定义为true和false。基本上你能想到的基本implemantation为:
#define bool int
#define true 1
#define false 0
true
和false
被定义为不为零,等于分别为零。所以基本上当last_word < (s + strlen(s) - 1)
时,count加1。
在C,关系运算符根据比较的结果总是产生0或1。所以,这种说法
count += last_word < (s + strlen(s) - 1);
增加0或1至count
。它可写为(和等同于):
if (last_word < (s + strlen(s) - 1)) {
count = count + 1;
} else {
count = count + 0;
}
(该else
部分不用;添加用于说明目的)
C11(N1548.pdf草案),关系运算符,§6.5。8,6
每个运营商<(小于),>(大于)的,< =(小于 或等于),和> =(大于或等于)应得到1-如果 指定的关系为真,如果它为假,则为0。 107)结果有 int类型。
'last_word <(s + strlen(s)-1);'计算结果为1或0(true或false) – Linus
请参阅[here](http://stackoverflow.com/questions/2725044/can -i-assume-booltrue-int1-for-any-c-compiler)关于将布尔转换为int的一些讨论 –
@EuanSmith这里的相关内容如何?关系运算符返回类型为“int”的结果。从哪里布尔进入图片? –