#include <stdio.h>
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
int addNumbers(int a, int b)
{
return a + b;
}
爲什麼不能編譯,我得到一條消息說隱式聲明函數addNumbers()
?「隱式函數聲明」是什麼意思?
#include <stdio.h>
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
int addNumbers(int a, int b)
{
return a + b;
}
爲什麼不能編譯,我得到一條消息說隱式聲明函數addNumbers()
?「隱式函數聲明」是什麼意思?
您需要在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;
}
您必須將整個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
}
看跌的addNumbers:後者做了以下方式
要打印,printf("%i",addNumbers(a, b));
將在上述情況下顯示7
。
要麼在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
}
作爲一個方面說明,函數聲明通常不是在.h文件中完成的嗎? – Powerlord 2010-01-29 14:55:47
@R。 Bemrose:當有多個源文件時,是的。當只有一個源文件時,就像這裏一樣,該函數應該聲明爲一個靜態函數(因爲它不需要從任何其他文件訪問,因爲只有一個文件需要編譯)。 – 2010-01-30 06:01:38
使用它由main()之前或者添加一個原型之前聲明函數在main()之前移動整個addNumbers函數。
您可以將整個功能,其中它被稱爲點以上,或使用功能的原型,就像這樣:
#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;
}
行爲未定義。根據標準:您必須在使用之前聲明該功能。 – 2010-07-20 07:06:13
你需要的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;
}
關於main
和return
:
程序會無需編譯。主要由標準定義的簽名是:
int main(void)
int main(int argc, char **argv)
有三個便攜式返回值:
0, EXIT_SUCCESS, EXIT_FAILURE
它們在
stdlib.h
定義
。
如果您的編譯器符合C99標準,則會拋出錯誤「隱式聲明」,因爲默認提升在C99標準中已過時。如果您嘗試使用C89標準進行編譯,這將是允許的。
在C99標準函數原型是必要
由於編譯器執行一個又一個線,它看到在函數調用時,它必須有關於函數的主要功能是calling.so的信息我的朋友在使用它之前需要告訴編譯器該函數。
我同意聲明和定義的事情,但我沒有得到任何編譯錯誤與上述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;
}
您必須在使用前聲明該函數。 在處理功能時請記住這4個基本部分。
除了之前的主聲明功能的addNumbers,這裏是我的2關於C風格美分(不適用於C++): 1)沒有參數的函數應該有簽名(void) - 因此'int main(void)'; 2)main應該返回C中的值 - 因此'return 0'是強制性的。 – 2010-01-29 10:43:25
所以我怎麼能打印它然後,因爲當我運行它只是什麼都沒有顯示,我試圖從主要返回總和printf(addNumbers(a,b))改變;但無濟於事 – bob 2010-01-29 10:45:30
這是另一個問題。此外,我敢肯定,如果您使用stackoverflow.com – sharptooth 2010-01-29 10:47:19