C語言中帶有返回類型的函數沒有return語句的影響


網上查資料發現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(目前尚不確定其他環境下是否也是相同結論)。

目前還不清楚其中的原理,暫時記錄實驗現象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM