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