c - 不输入 if 语句

标签 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 语句。我确实认为 continue 会转到 while 语句,但我仍然不明白为什么它不先执行 continue 。

谢谢

最佳答案

如果您在启用优化的情况下进行编译,则 if 的跳转指令完全有可能直接进入 while,而不是费心处理 continue,这只是另一个简单的跳转指令。

关于c - 不输入 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513432/

相关文章:

c - C中的MPI前缀和

c - IAR 编译器 : using struct with function pointers, 映射文件显示结构中声明的所有函数,无论是否使用函数

无法让 C 中的 while 函数工作

c - 字符串末尾的空字符 '\0'

c - 客户端IP地址/MAC

c - 字符数组的工作原理

android - 堆损坏 - Android native 代码中的 SEGV_MAPERR

c - 函数调用的最小深度

c - 返回指向多维数组的指针

c - malloc.c :3096: SYSMALLOC: Assertion failed