我正在看一个词法分析器代码,我遇到了这个:
while ("false")
{
c = fgetc(f);
switch (state)
...
我测试了它并且代码有效,它产生了正确的结果。如果存在false
条件,为什么循环会运行?循环永远不会运行?
答案 0 :(得分:4)
循环将起作用,例如while(1)
,while(100)
,while("something else")
。
我认为这段代码的作者有一种奇怪的幽默感。
答案 1 :(得分:3)
"false"
是一个非零地址的字符串。地址评估为true
条件中的while
。
答案 2 :(得分:2)
while
控制结构只接受布尔参数。
如果它没有获得布尔参数,则将参数计算为布尔值。在这种情况下," false"是一个字符串,它的计算结果为true
。只有0
和false
实际上意味着错误。
答案 3 :(得分:1)
为了永远不会运行while循环,条件应该是数字0
,或者没有任何撇号,引号等的关键字false
...包围它。
0
或false
是布尔型值。但是,传递"0"
与0
不同,因为" 0"是一个字符串值。除了0
或false
之外,for-loop条件中的任何其他内容都会导致while()
运行(除非您已指定某些条件,但是这样做了与此问题无关。)
因此,因为" 0"是一个字符串,不等于0
,编译器传递将其视为非假值(或非零值),并运行while()
循环
如果您执行while(0)
,那么while
循环将不会运行一次。