一個無常的C程式

來源:互聯網
上載者:User

一個無常的C程式

作者:張桂權 

謹慎代碼中的bug, 不要做出沒有必要的犧牲。

#include <stdio.h>
main(){

 printf("%g", sqrt(2));

}

結果:
1.531132e-309

#include <stdio.h>
#include <math.h>

main(){

 printf("%g", sqrt(2));

}

結果:
1.41421

錯誤在於前一個程式的定義中我們既沒有定義一個sqrt(int)()這樣的函數,
也沒有調用庫函數double sqrt(double)(...),所以結果就出來了一個讓人
吃驚的數字。這與特定版本的編譯器有很大的關係。當沒有定義函數時,連
接器試圖通過調用外部的同名的函數,但是我們不知道,它到底做了什麼。

而,載貨一個函數中,則直接通過調用標頭檔
#include <math.h>
的方式來調用庫函數,結果沒有錯誤,因為我們試圖通過“%g”的格式來
返回運算的結果。

這也是一個隱含的錯誤,編寫代碼的時候要特別的小心,免得犯這樣的錯誤。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.