[英]No math.h include - sqrt function return value?
我有以下C代碼:
#include <stdio.h>
main()
{
double wurzelZwei;
wurzelZwei = sqrt(2.0);
printf("Wurzel 2: %lf\n", wurzelZwei);
}
為什么不包含“ math.h”庫時,sqrt的返回值是“ 1073742463”,並且編譯器/鏈接器僅顯示警告,而沒有致命錯誤?
在C89和更早版本中,允許調用尚未聲明的函數。 這樣做時,假定該函數的返回類型為int。 這稱為隱式聲明。
當您以這種方式調用一個函數,但已使用int以外的返回類型定義該函數時,您將調用未定義的行為,就好像您已使用不同於定義該函數的返回類型顯式聲明了該函數一樣。
因此,在您的情況下,發生的情況是您用默認的返回類型int隱式聲明了sqrt,因此從sqrt獲得的返回值被(錯誤地)解釋為int,然后將int存儲在wurzelZwei
時,該int會轉換為double。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.