C while(false)循环

时间:2017-03-28 20:02:29

标签: c while-loop lexical-analysis

我正在看一个词法分析器代码,我遇到了这个:

while ("false")
{
    c = fgetc(f);
    switch (state)
    ...

我测试了它并且代码有效,它产生了正确的结果。如果存在false条件,为什么循环会运行?循环永远不会运行?

4 个答案:

答案 0 :(得分:4)

循环将起作用,例如while(1)while(100)while("something else")。 我认为这段代码的作者有一种奇怪的幽默感。

答案 1 :(得分:3)

"false"是一个非零地址的字符串。地址评估为true条件中的while

答案 2 :(得分:2)

while控制结构只接受布尔参数。

如果它没有获得布尔参数,则将参数计算为布尔值。在这种情况下," false"是一个字符串,它的计算结果为true。只有0false实际上意味着错误。

答案 3 :(得分:1)

为了永远不会运行while循环,条件应该是数字0,或者没有任何撇号,引号等的关键字false ...包围它。

0false是布尔型值。但是,传递"0"0不同,因为" 0"是一个字符串值。除了0false之外,for-loop条件中的任何其他内容都会导致while()运行(除非您已指定某些条件,但是这样做了与问题无关。)

因此,因为" 0"是一个字符串,等于0,编译器传递将其视为非假值(或非零值),并运行while()循环

如果您执行while(0),那么while循环将不会运行一次。