2014-11-08 109 views
-2
#include <stdio.h> 
#include <math.h> 

float mysqrt (float x) 

{ 

    float y; 
    x=x-1; 
    y= 1+(x/2)-(pow(x,2)/2)+(pow(x,3)/8)-(5*pow(x,4)/128); 


    return y; 

} 

int main() 

{ 

    printf("%f",mysqrt(5)); 
} 

「爲‘mysqrt’衝突的打字員」我搜索該網站較舊的答案,並試圖利用他們,但我仍然無法弄清楚,爲什麼它不工作它給了我錯誤

+4

不能重複:http://ideone.com/hnikmQ運行時錯誤顯示,但不是編譯錯誤。你使用什麼編譯器? – PaulMcKenzie 2014-11-08 22:48:45

+2

確定'main()'中的函數調用在** mysqrt()'的定義之前沒有出現**? – 2014-11-08 22:50:48

+0

我試了兩種。當mysqrt在主體之後,當它像以前一樣時,他們都沒有工作。我使用XCODE,但我也在C大學的網站上爲它編譯過,但它也沒有用。 – Can 2014-11-08 23:04:13

回答

0

我不認爲你發佈的代碼是相當準確的。

您可能在之前撥打mysqrt()您已提供該功能的聲明。在老版本的C標準(C89)的,這是允許的,該功能將給出一個隱含的聲明:

int mysqrt(); 

也就是說,一個函數獲取數目不詳的非可變參數的參數,並返回int 。這明顯與功能的實際定義矛盾。

在標準(C99/C11)的更新版本中,如果您嘗試調用尚未聲明的函數,則編譯器需要生成診斷消息。

使函數定義之前出現函數調用,函數調用之前提供一個函數聲明你應該改變你的代碼。例如:

float mysqrt (float); 

int main() 
{ 
    printf("%f",mysqrt(5)); 
} 

float mysqrt (float x) 
{ 
    /* Function body */ 
} 
+0

是的,它的工作。我現在明白了。它的確如此我認爲,它需要先聲明然後再使用。非常感謝你。 – Can 2014-11-08 23:11:48

相關問題