linux編程學習筆記(十) C語言中的函數隱式聲明

來源:互聯網
上載者:User

fun.c

float fun(){return 1.234;}

test.c

#include <stdio.h>int main(){float a = fun();printf("%f\n",a);}

gcc fun.c test.c 
 zhao@ubuntu:~/unix/4$ ./a.out 
1067316160.000000

發現得到的結果不僅是個整數 還是個很怪異的數字  並且編譯時間沒有報錯 這是為什麼呢?

C語言中的規則是這樣的:

如果上下文中未出現的名字出現在運算式中,並且後面帶一個圓括弧,那麼會認為該名字是一個函數,並且假定它的傳回值是int,不會對它的參數做任何假設.

在編譯時間加上-Wall 會發現有Warning: implicit declaration of function "fun"  意思是對fun的隱式聲明

傳回值被當作int類型返回給了float,最後的結果當然怪異啦

造成這個錯誤的原因是沒有聲明函數

在main函數前面加上

float fun(); 

本意是 extern float fun(); 但函式宣告前面的extern可以省略. 所以可寫可不寫.

寫上聲明不僅可以防止隱式聲明導致的傳回值類型改變,還可以做函數參數類型檢查,所以注意寫聲明.(或者包含標頭檔)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.