[英]What does “implicit declaration of function” mean?
#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()
之前定義函數或在main()
之前提供其原型。
所以要么這樣做:
#include <stdio.h>
int addNumbers(int a, int b)
{ //definition
}
int main()
{ //Code in main
addNumbers(a, b);
}
或這個:
#include <stdio.h>
int addNumbers(int, int);
int main()
{ //Code in main
addNumbers(a, b);
}
int addNumbers(int a, int b)
{ // definition
}
您需要在main()中調用之前聲明該函數。 要么在主要之前移動它,要么至少在那里聲明它。 另外,你應該在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);
int main()
{
// code of main() here
}
int addNumbers(int a, int b)
{
//code of addNumbers() here
}
在main之前添加addNumbers
int addNumbers(int a, int b)
{
return a + b;
}
int main()
{
int a = 4;
int b = 3;
addNumbers(a, b);
}
更新 :
要打印它, printf("%i",addNumbers(a, b));
將在上述情況下顯示7
。
您可以將整個函數移動到調用它的位置之上,或者使用函數原型,如下所示:
#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;
}
您需要在第一次使用之前向上移動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
中定義。
在使用之前通過在main()之前添加原型來聲明函數:
int addNumbers(int a, int b);
或者在main()之前移動整個addNumbers函數。
我同意聲明和定義的事情,但我沒有得到上述代碼的任何編譯錯誤。我的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個基本部分。
如果你的編譯器是C99標准它會拋出並且錯誤“隱式聲明”,因為默認促銷在C99標准中已經過時了。 如果您嘗試使用C89標准進行編譯,則這是允許的。
在C99中,標准功能原型是必要的
由於編譯器一個接一個地執行一行,當它看到函數調用時,它必須具有關於該函數的信息,主函數正在調用。所以我的朋友你需要先告訴編譯器有關函數的信息。用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.