gcc
なぜこの警告が表示されるのか、説明を探しています。
gcc-3
フラグを付けてoncygwin
でコンパイルしてい-Wunreachable-code
ますが、gcc は次の警告を表示します。
main.c:223: 警告: 決して実行されません
それはこの行です:while(fgets(line, MAX_LINE, stdin) != NULL) {
このコードは、コマンドライン引数 (によって解析) に従って動的に設定されるif(exp) { }
ブロック内にあります。コード部分を見てください。exp
getopt()
if(mystruct.hastab) {
デフォルト値は です0
。ただし、次のように1
、-t
フラグがアプリケーションに渡された場合は次のようになります。
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 {
//...
}
}
したがって、コードが実行される理由があります。たまたま。