繁体   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