-5

このプログラムを gcc でテストしましたが、答えは 1 です。理由がわかりませんでした。

main()
{
int c = 5;
printf("%d", main||c);
}

回答: gcc コンパイラ (Dev C++) で表示されます。

4

4 に答える 4

3

かっこなしで単独で表示される場合mainは、関数へのポインター(事実上、のアドレスmain()) です。

したがって

main || c

と同等です

(main != NULL) || (c != 0)

これは常に true (つまり1) と評価されます。

于 2013-04-07T16:25:40.417 に答える
2

これは論理OR演算です。の少なくとも 1 つがポインターmainでないか、0 以外の場合は 1 に評価されます。それ以外の場合は 0 を返します。は既存の関数であるため、それへのポインターは ではなく、ゼロでもないため、このコードは を出力します。NULLcmain()NULL51

于 2013-04-07T16:25:16.180 に答える
0

main||c非 NULL で、ゼロ以外の値を持つOR関数ポインタをテストする論理値です。どちらもorではないため、これは logical の出力であるため、常に出力されます。mainczeroNULL1OR

于 2013-04-07T16:26:17.470 に答える
0

gccのオプションを付けてコンパイルする必要があり-Wallます (ほとんどすべての警告を取得-Wextraするには、さらに多くの警告が表示されます)。とgcc-4.8私は得ています

% gcc-4.8 -Wall atiq.c -o atiq
atiq.c:1:1: warning: return type defaults to 'int' [-Wreturn-type]
 main()
 ^
atiq.c: In function 'main':
atiq.c:4:1: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
 printf("%d", main||c);
 ^
atiq.c:4:1: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
atiq.c:4:14: warning: the address of 'main' will always evaluate as 'true' [-Waddress]
 printf("%d", main||c);
              ^
atiq.c:5:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

警告は十分に明確だと思います。mainそして、常に null 以外のアドレスを持っていることがわかります。したがってmain||c、常に true です。

そして、あなたのコードには#include <stdio.h>

于 2013-04-07T16:27:44.947 に答える