このプログラムを 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 を返します。は既存の関数であるため、それへのポインターは ではなく、ゼロでもないため、このコードは を出力します。NULL
c
main()
NULL
5
1
main||c
非 NULL で、ゼロ以外の値を持つOR
関数ポインタをテストする論理値です。どちらもorではないため、これは logical の出力であるため、常に出力されます。main
c
zero
NULL
1
OR
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>