我在检查代码应在 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 语句。我确实认为 continue 会转到 while 语句,但我仍然不明白为什么它不先执行 continue 。
谢谢
最佳答案
如果您在启用优化的情况下进行编译,则 if
的跳转指令完全有可能直接进入 while
,而不是费心处理 continue
,这只是另一个简单的跳转指令。
关于c - 不输入 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513432/