網上查資料發現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(目前尚不確定其他環境下是否也是相同結論)。
目前還不清楚其中的原理,暫時記錄實驗現象。