gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:39 25 4
gpt4 key购买 nike

我正在寻找为什么 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/

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