-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)

它总是评估为真(即1)。

于 2013-04-07T16:25:40.417 回答
2

这是一个合乎逻辑的OR操作。如果其中至少一个main不是NULL指针或c非零,则它的计算结果为 1;否则,它产生 0。由于main()是现有函数,指向它的指针不是NULL5也不为零,所以这段代码将打印1

于 2013-04-07T16:25:16.180 回答
0

main||c是一个逻辑OR函数,它将测试函数指针main是否为非 NULL 并且c具有一些非零值。由于它们都不是zeroor NULL,因此它将始终打印1,因为这是 logical 的输出OR

于 2013-04-07T16:26:17.470 回答
0

您应该使用-Wallgcc 选项对其进行编译(以获取几乎所有警告,-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>

于 2013-04-07T16:27:44.947 回答