网上查资料发现C++编译器不允许这种做法,会报编译错误,但是C编译器如GCC一般不会报错,但返回的值不确定。
自己写了简单的代码做了个试验,代码如下:
#include <stdio.h>
int a()
{ // printf("function a called\n");}int b()
{ // printf("function b called\n");}int main()
{ int a1 = a(); int b1 = b();printf("a1=%d, b1=%d\n", a1, b1);
}
运行结果,当不放开注释时结果如下:
当放开注释时结果如下:
当方法a放开注释,方法b不放开注释时,结果如下:
似乎函数返回的值总是相同的,而且范围只在0和1之间。
又加了一个方法c,继续观察结果:
#include <stdio.h>
int a()
{ printf("function a called\n");}int b()
{ // printf("function b called\n");}int c()
{ //int c = 1 + 2;}int main()
{ int a1 = a(); int b1 = b(); int c1 = c();printf("a1=%d, b1=%d, c1=%d\n", a1, b1, c1);
}编译执行结果为:
将a方法的内容注释掉,编译执行结果为:
似乎规律是只要有一个方法中有可执行的语句,所有方法都返回0,如果所有方法都是空方法(没有语句)就都返回1(目前尚不确定其他环境下是否也是相同结论)。
目前还不清楚其中的原理,暂时记录实验现象。