c:这条线做什么?

时间:2016-09-21 08:14:01

标签: c addition operator-precedence compound-assignment relational-operators

我读了一些代码,并且遇到了这个相当神秘的语法:

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。 这条线做了什么?

3 个答案:

答案 0 :(得分:5)

根据operator precedance表,<绑定高于+=运算符,因此您的代码基本上是

 count += ( last_word < (s + strlen(s) - 1)) ;

其中,(A < B)评估为0或1 注意,因此,最后,它减少到

count += 0;

count += 1;

注意: 与“10”部分相关,引用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

truefalse分别定义为非零且等于零。所以基本上当last_word < (s + strlen(s) - 1)时,count加1。