2013-04-17 56 views
2

我想在ANSI C代碼中聲明一個函數,我可以在main()中使用它之後定義函數嗎? 例如,我寫了一個絕對值函數:任何人都可以告訴我它是否合理?C語言入門:函數聲明

#include <stdio.h> 

int main() 
{ 
    double value1 = -5; 
    printf("%lf", 
      abs(value1)); 
} 

double abs(double number) 
{ 
    if (number < 0) { 
     (number * (-1) = number); 
    } 
    return number; 
} 
+1

如果它以任何方式都很重要,可以使用abs函數來執行所需操作,它存在於math.h庫(對於C++)或cmath.h(對於C)中。 – Edeph

+3

@Edeph你有這些包括倒退,''爲C + +和''爲C. – Joe

+0

是的,我很抱歉我的壞。 – Edeph

回答

5

您需要解決幾件事情:

#include <stdio.h> 

double abs(double number); // <<< 1. prototype here 

int main() 
{ 
    double value1 = -5; 

    printf("%lf", 
      abs(value1)); 
} 

double abs(double number) 
{ 
    if (number < 0) { 
     number = number * -1.0; // <<< 2. fix here 
    } 
    return number; 
} 
  1. abs功能需要一個原型,以使編譯器知道其函數簽名你怎麼稱呼它

  2. 您的否定式表示number是背對背

+0

+1。作爲一個方面說明:不需要在C中聲明函數原型,雖然它絕對是一個好習慣:http://stackoverflow.com/a/2575204/814702 – informatik01

+0

@ informatik01:在這種情況下,它*是*因爲默認的int參數和函數結果顯然不起作用。 –

+0

在這種情況下,我同意。這只是一個*普通*的附註。無法幫助,對不起) – informatik01

1

函數必須至少是聲明它們被使用之前,最好使用原型語法(指定的數量和類型的參數,以及返回類型)。因此,在最起碼,你需要像

double abs(double number); 

某處一行在你的代碼之前,你在main調用abs

您還可以定義功能在使用前:

double abs(double number) 
{ 
    // compute absolute value 
} 

int main(void) 
{ 
    ... 
    x = abs(x); 
    ... 
} 

其實,這是我的偏好;在使用之前,同一翻譯單元(文件)中的所有內容應該是,定義爲。這樣你就不用擔心保持聲明和定義的同步。