当main ||整数写入时,main函数的实际行为如何?

时间:2013-04-07 16:23:07

标签: c

我在gcc上测试了这个程序它的答案是1.我找不到原因怎么样?

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

答案:它正在gcc编译器上展示(Dev C ++)

4 个答案:

答案 0 :(得分:3)

当它单独显示而没有括号时,mainpointer 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,它具有一些非零值。由于它们都不是zeroNULL,因此它始终会打印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>