このプログラムを gcc でテストしましたが、答えは 1 です。理由がわかりませんでした。
main()
{
int c = 5;
printf("%d", main||c);
}
回答: gcc コンパイラ (Dev C++) で表示されます。
main()
{
int c = 5;
printf("%d", main||c);
}
回答: gcc コンパイラ (Dev C++) で表示されます。
かっこなしで単独で表示される場合mainは、関数へのポインター(事実上、のアドレスmain()) です。
したがって
main || c
と同等です
(main != NULL) || (c != 0)
これは常に true (つまり1) と評価されます。
これは論理OR演算です。の少なくとも 1 つがポインターmainでないか、0 以外の場合は 1 に評価されます。それ以外の場合は 0 を返します。は既存の関数であるため、それへのポインターは ではなく、ゼロでもないため、このコードは を出力します。NULLcmain()NULL51
main||c非 NULL で、ゼロ以外の値を持つOR関数ポインタをテストする論理値です。どちらもorではないため、これは logical の出力であるため、常に出力されます。mainczeroNULL1OR
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>