簡體   English   中英

“隱含的功能聲明”是什么意思?

[英]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;
}

關於mainreturn

程序將在沒有編譯。 標准定義的主要簽名是:

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個基本部分。

  1. 宣言
  2. 呼叫
  3. 定義
  4. 返回

如果你的編譯器是C99標准它會拋出並且錯誤“隱式聲明”,因為默認促銷在C99標准中已經過時了。 如果您嘗試使用C89標准進行編譯,則這是允許的。

在C99中,標准功能原型是必要的

由於編譯器一個接一個地執行一行,當它看到函數調用時,它必須具有關於該函數的信息,主函數正在調用。所以我的朋友你需要先告訴編譯器有關函數的信息。用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM