【问题标题】:What happens when you call an implicitly declarated function in C? [duplicate]当您在 C 中调用隐式声明的函数时会发生什么? [复制]
【发布时间】:2019-03-31 00:52:29
【问题描述】:

我最近在软件中发现了一个与以下警告相关的错误:

warning: implicit declaration of function ‘my_func’ [-Wimplicit-function-declaration]

尽管有警告,但代码正在编译并且(大部分时间)正在运行。

我的问题是,当代码运行并调用该函数时会发生什么?这是未定义的行为,还是我可以假设函数调用是空操作?

【问题讨论】:

  • 行为是未定义,因为编译器没有任何余地来做它想做的任何事情。相反,它发出一条消息,告诉您您的程序是无效程序。当然,当涉及到编译无效程序时,所有的赌注都没有了。

标签: c


【解决方案1】:

这通常表明声明这个子例程的头文件没有#included。当子例程在未声明的情况下使用时,许多 C 编译器会生成隐式声明。这种行为是错误的常见原因,因为如果隐式声明与实际定义不匹配,编译器可能会生成不正确的代码。

link 包含一个示例。了解您的担忧可能会有所帮助。

【讨论】:

  • 如果我的回答对你有用,那么你可以接受。
【解决方案2】:

假定隐式定义的函数返回int 并采用任意数量的参数。对于实际功能来说,这可能是真的,也可能不是。

根据您的平台,参数可能会以意想不到的方式传递,例如。 G。在寄存器中,通过堆栈等。如果传递参数的方式与预期不符,事情就会变得疯狂。

【讨论】:

    【解决方案3】:

    C 中的默认函数声明的参数为int

    因此,如果您不声明该函数,编译器将假定它返回int 并具有int 的所有参数。

    但是,您仍然需要定义函数,否则链接器会报错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2015-03-31
      • 2011-03-06
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多