我读了一些代码,并且遇到了这个相当神秘的语法:
size_t count = 1;
char *s = "hello you";
char *last_word = "there";
count += last_word < (s + strlen(s) - 1); #line of interest
不知何故,计数增加了。但我认为&lt;运算符将返回true或false。 这条线做了什么?
答案 0 :(得分:5)
根据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
int
。 107)结果的类型为AVPlayerItemVideoOutput
。
答案 1 :(得分:1)
在C中,关系运算符总是产生0或1.所以,这句话
<div class="mockupsec">
<div class="show-mockup-button" name="222">SHOW MOCKUPS</div>
<div class="mockup-show" id="222">
<div class="container" id="222-Expansion">
<div class="title">
<p>Expansion</p>
</div>
<div class="imagerow">
<div class="imagecol">
<img class="" src="some src">
<div class="item-text-wrapper">
<p class="itemtitle"></p>
<p class="itemcomment"></p>
</div>
</div>
<div class="imagecol">
<img class="" src="some src">
<div class="item-text-wrapper">
<p class="itemtitle"></p>
<p class="itemcomment"></p>
</div>
</div>
</div>
</div>
</div>
将0或1添加到count += last_word < (s + strlen(s) - 1);
,具体取决于比较的结果。它可以写成(并等同于):
count
(if (last_word < (s + strlen(s) - 1)) {
count = count + 1;
} else {
count = count + 0;
}
部分是不必要的;为了解释的目的而添加。)
C11(草案N1548.pdf),关系运算符,§6.5.8,6
每个运营商&lt; (小于),&gt; (大于),&lt; =(小于 或者等于),并且&gt; =(大于或等于)如果是,则产生1 指定的关系为true,如果为false则为0。 107)结果有 输入int。
答案 2 :(得分:0)
在C中有一个stdbool.h
标题,定义为true和false。从本质上讲,您可以将基本实现视为:
#define bool int
#define true 1
#define false 0
true
和false
分别定义为非零且等于零。所以基本上当last_word < (s + strlen(s) - 1)
时,count加1。