在C中调用隐式声明的函数时会发生什么?

时间:2018-10-26 09:33:05

标签: c

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

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

尽管有警告,但代码仍在编译并且可以正常工作。

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

3 个答案:

答案 0 :(得分:0)

这通常表示声明此子例程的头文件未包含在#include中。当未声明使用子例程时,许多C编译器都会生成一个隐式声明。此行为是导致错误的常见原因,因为如果隐式声明与实际定义不匹配,则编译器可能会生成错误的代码。

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

答案 1 :(得分:-1)

假定隐式定义的函数返回int并接受任意数量的参数。对于实函数,这可能是正确的,也可能不是正确的。

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

答案 2 :(得分:-2)

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

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

但是,您仍然需要定义该函数,否则链接器将给出错误消息。