“隐含的功能声明”是什么意思?

时间:2010-01-29 10:39:00

标签: c

#include <stdio.h>

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

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

为什么这不编译,我收到一条消息,说明函数addNumbers()的隐式声明?

11 个答案:

答案 0 :(得分:20)

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
}

答案 1 :(得分:8)

在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;
}

答案 2 :(得分:6)

您必须将整个addNumber()函数移动到main之上或提供原型。后者按以下方式完成:

int addNumbers(int a, int b);

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

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

答案 3 :(得分:4)

将addNumbers放在main

之前
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

答案 4 :(得分: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;
}

答案 5 :(得分: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

中定义

答案 6 :(得分:1)

在使用之前通过在main()之前添加原型来声明函数:

int addNumbers(int a, int b);

或在main()之前移动整个addNumbers函数。

答案 7 :(得分:1)

我同意声明和定义的事情,但我没有得到上述代码的任何编译错误。我的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;
}

答案 8 :(得分:1)

您必须在使用前声明该功能。 在处理函数时请记住这4个基本部分。

  1. 声明
  2. 呼叫
  3. 定义
  4. 返回

答案 9 :(得分:0)

如果你的编译器是C99标准它会抛出并且错误“隐式声明”,因为默认促销在C99标准中已经过时了。 如果您尝试使用C89标准进行编译,则这是允许的。

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

答案 10 :(得分:0)

由于编译器一个接一个地执行一行,当它看到函数调用时,它必须具有关于该函数的信息,而该函数正在调用。所以我的朋友你需要告诉编译器之前的函数你可以使用它。