c - gcc 报告 "will never be executed"关于行 : while(fgets(line, MAX_LINE, stdin) != NULL)

标签 c cygwin warnings gcc3 unreachable-code

我正在寻找为什么 gcc 为我发出此警告的解释。

我正在使用 -Wunreachable-code 标志在 cygwin 上使用 gcc-3 进行编译,并且 gcc 表示此警告我:

main.c:223: warning: will never be executed

就是这一行:while(fgets(line, MAX_LINE, stdin) != NULL) {

此代码位于 if(exp) { } block 中,其中 exp 根据命令行参数(由 getopt() 解析)动态设置 ),看代码部分:

 if(mystruct.hastab) {

默认值为0。但是如果 -t 标志被传递给应用程序,它就会变成 1,正如您在下面看到的:

struct mystruct_t {
   //... 
   int hastab;
} mystruct;

    int main(int argc, char *argv[])
    {

      int opt;
        memset(&mystruct, 0, sizeof(mystruct));
         while((opt = getopt(argc, argv, optString)) != -1) {
            switch(opt) {
              case 't':
               mystruct.hastab = 1;
               break;
              //....
            }
        }
         proc();
        return 0;
    }

    void 
    proc(void)
    {
      char *buf, *tmpbuf, line[MAX_LINE + 1], *p, *fullfilename;

      if(mystruct.hastab) {

        while(fgets(line, MAX_LINE, stdin) != NULL) {
           //...
        }
      } else {
       //...
      }
    }

因此,执行代码是有原因的。碰巧。

最佳答案

听起来 gcc 确信 hastab 从未被设置,或者它只在它警告的代码之后被设置。看起来 gcc 肯定是错误的,但由于您只给了我们一些片段,所以很难确定。我认为除非我们看到可以自己编译的完整程序,否则没有人可以进一步帮助您。

关于c - gcc 报告 "will never be executed"关于行 : while(fgets(line, MAX_LINE, stdin) != NULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586339/

相关文章:

c - GCC v4.9.2 上无法识别的命令行选项 ‘-rdynamic’

c++ - Cygwin不会编译任何C++文件

c - C 的 TDD。如何使用 CppUTest 编译和运行我的第一个测试?

c++ - C 中的 Doxygen 错误

c - C中的假匿名函数

C:为什么为 int 参数传递 float/double 文字不会引发警告?

c - 为什么这个程序会导致如此多的缓存未命中?

python - 无法使用 cygwin 运行 pexect

.net - "Access of shared member, constant member, enum member or nested type through an instance"

functional-programming - 禁止OCaml中的详尽匹配警告