gpt4 book ai didi

c - 不输入 if 语句

转载 作者:行者123 更新时间:2023-12-03 05:32:58 25 4
gpt4 key购买 nike

我在检查代码应在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com