main()
{
int c = 5;
printf("%d", main||c);
}
答案:它正在gcc编译器上展示(Dev C ++)
答案 0 :(得分:3)
当它单独显示而没有括号时,main
是pointer to function(实际上是main()
的地址)。
因此
main || c
相当于
(main != NULL) || (c != 0)
总是评估为真的(即1
)。
答案 1 :(得分:2)
这是一个逻辑OR
操作。如果main
中至少有一个不是NULL
指针或c
非零,则评估为1;否则,它会产生0.因为main()
是现有函数,指向它的指针不是NULL
,而5
也不是零,所以此代码将打印1
答案 2 :(得分:0)
main||c
是一个逻辑OR
,它将测试main
的非NULL的函数指针和c
,它具有一些非零值。由于它们都不是zero
或NULL
,因此它始终会打印1
,因为这是逻辑OR
的输出。
答案 3 :(得分:0)
您应该使用-Wall
选项将其编译为gcc(以获得几乎所有警告,-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
始终是非空地址,因此main||c
始终为真。
您的代码缺少#include <stdio.h>