没有输入if语句

时间:2011-04-01 12:36:01

标签: c

我遇到了一个问题,即查看代码应该在c:

中输入的if语句
void getInput(void)
    {
        static size_t _read = 0;
        memset(line, 0, _read);
        do{
            memset(line, 0, _read);
            write(STDOUT_FILENO, ">> ", 3);
            _read = read(STDIN_FILENO, line, MAXLINE - 1);
            if (line[0] == '\n' || line[0] == '\r')
                continue;
        }while(line[_read - 1] != '\n');
        line[_read] = '\0';
    }

问题在于行“if(line [0] =='\ n'|| line [0] =='\ r')”这里是调试器的摘录。

getInput () at main.c:29
29          if (line[0] == '\n' || line[0] == '\r')
1: line[0] = 10 '\n'
(gdb) step
31      }while(line[_read - 1] != '\n');
1: line[0] = 10 '\n'
(gdb) list 29
24      memset(line, 0, _read);
25      do{
26          memset(line, 0, _read);
27          write(STDOUT_FILENO, ">> ", 3);
28          _read = read(STDIN_FILENO, line, MAXLINE - 1);
29          if (line[0] == '\n' || line[0] == '\r')
30              continue;
31      }while(line[_read - 1] != '\n');
32      line[_read] = '\0';
33  }

正如您所看到的那样,它不会转到continue语句,而是直接转到while语句。我确实认为继续会转到while语句,但我仍然不明白为什么它不会先继续继续。

由于

4 个答案:

答案 0 :(得分:1)

如果您在启用优化的情况下进行编译,if的跳转指令完全可能直接转到while,而不是打扰continue,只是另一个简单的跳转指令。

答案 1 :(得分:0)

继续会带你去声明。这可能是由于编译器的优化。它检测到继续之后没有语句,因此无论if条件是否为真,结果步骤都是相同的。

答案 2 :(得分:0)

你的if是多余的。这是循环中的最后一件事,它所做的就是继续循环。如果您使用任何优化,它可能会被删除。

你的代码应该做什么?

答案 3 :(得分:0)

调试器执行语句。

有问题的行没有完整的陈述;调试器永远不会在语句中间停止。

想象一下,你有如下所示的多行语句。调试器会停在哪里?

for (
    i = 0;
    i < 100;
    i++)
            sum += a[i];