2010-01-29 83 views
17
#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

爲什麼不能編譯,我得到一條消息說隱式聲明函數addNumbers()「隱式函數聲明」是什麼意思?

+0

除了之前的主聲明功能的addNumbers,這裏是我的2關於C風格美分(不適用於C++): 1)沒有參數的函數應該有簽名(void) - 因此'int main(void)'; 2)main應該返回C中的值 - 因此'return 0'是強制性的。 – 2010-01-29 10:43:25

+0

所以我怎麼能打印它然後,因爲當我運行它只是什麼都沒有顯示,我試圖從主要返回總和printf(addNumbers(a,b))改變;但無濟於事 – bob 2010-01-29 10:45:30

+0

這是另一個問題。此外,我敢肯定,如果您使用stackoverflow.com – sharptooth 2010-01-29 10:47:19

回答

8

您需要在main()中調用它之前聲明該函數。要麼在主要之前移動它,要麼至少在主要位置聲明它。 此外,您應該在主函數的末尾添加return 0,因爲它應該返回int

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
    return 0; 
} 
+1

@ruibm:_Also,你應該在概率的主要功能的結束,因爲它應該返回int_添加返回0:**電話**那可選 – 2010-01-29 10:45:13

+2

是的,我知道它是,但它是一個良好的編程習慣和如果打開迂迴模式,編譯器會發出警告。 – rui 2010-01-29 10:49:26

+0

進一步挑剔,在C中它是一個「功能」,而不是「方法」。否則很好。 – Vatine 2010-01-29 10:56:05

6

您必須將整個addNumber()函數移動到main函數之上或提供原型。之前主要

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 

    addNumbers(a, b); 
} 

UPDATE

int addNumbers(int a, int b); 

int main() 
{ 
// code of main() here 
} 

int addNumbers(int a, int b) 
{ 
//code of addNumbers() here 
} 
4

看跌的addNumbers:後者做了以下方式

要打印,printf("%i",addNumbers(a, b));將在上述情況下顯示7

19

要麼在main()之前定義該功能,要麼在main()之前提供其原型。

因此,無論這樣做:

#include <stdio.h> 

int addNumbers(int a, int b) 
{ //definition 
} 

int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

或該:

int addNumbers(int a, int b); 

或:

#include <stdio.h> 

int addNumbers(int, int); 
int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ // definition 
} 
+0

作爲一個方面說明,函數聲明通常不是在.h文件中完成的嗎? – Powerlord 2010-01-29 14:55:47

+1

@R。 Bemrose:當有多個源文件時,是的。當只有一個源文件時,就像這裏一樣,該函數應該聲明爲一個靜態函數(因爲它不需要從任何其他文件訪問,因爲只有一個文件需要編譯)。 – 2010-01-30 06:01:38

1

使用它由main()之前或者添加一個原型之前聲明函數在main()之前移動整個addNumbers函數。

2

您可以將整個功能,其中它被稱爲點以上,或使用功能的原型,就像這樣:

#include <stdio.h> 

int addNumbers(int a, int b); // function prototype 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
+0

行爲未定義。根據標準:您必須在使用之前聲明該功能。 – 2010-07-20 07:06:13

2

你需要的addNumbers功能的正向聲明或它的定義上升在第一次使用前:

// 2161304 
#include <stdio.h> 

// forward declaration 
int addNumbers(int a, int b); 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

// alternatively move this up before main ... 
int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

關於mainreturn

程序會無需編譯。主要由標準定義的簽名是:

int main(void) 
int main(int argc, char **argv) 

有三個便攜式返回值:

0, EXIT_SUCCESS, EXIT_FAILURE 
它們在 stdlib.h定義

0

如果您的編譯器符合C99標準,則會拋出錯誤「隱式聲明」,因爲默認提升在C99標準中已過時。如果您嘗試使用C89標準進行編譯,這將是允許的。

在C99標準函數原型是必要

0

由於編譯器執行一個又一個線,它看到在函數調用時,它必須有關於函數的主要功能是calling.so的信息我的朋友在使用它之前需要告訴編譯器該函數。

1

我同意聲明和定義的事情,但我沒有得到任何編譯錯誤與上述code.My gcc版本是「4.4.1-4ubuntu9」。任何想法。

我做了一些修改,以測試代碼。

#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    printf("%d", addNumbers(a, b)); // Printf added. 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
0

您必須在使用前聲明該函數。 在處理功能時請記住這4個基本部分。

  1. 宣言
  2. 呼叫
  3. 定義
  4. 返回
相關問題