我最近在软件中发现了与以下警告有关的错误:
warning: implicit declaration of function ‘my_func’ [-Wimplicit-function-declaration]
尽管有警告,但代码仍在编译并且可以正常工作。
我的问题是,当代码运行并调用该函数时会发生什么?那是未定义的行为,还是我可以假定函数调用是无操作的?
答案 0 :(得分:0)
这通常表示声明此子例程的头文件未包含在#include中。当未声明使用子例程时,许多C编译器都会生成一个隐式声明。此行为是导致错误的常见原因,因为如果隐式声明与实际定义不匹配,则编译器可能会生成错误的代码。
此link包含一个示例。了解您的担忧可能会有所帮助。
答案 1 :(得分:-1)
假定隐式定义的函数返回int
并接受任意数量的参数。对于实函数,这可能是正确的,也可能不是正确的。
根据您的平台,参数可能会以意外的方式传递,例如G。在寄存器中,通过堆栈等。如果传递参数的方式与预期不符,事情就会发疯。
答案 2 :(得分:-2)
C中的默认函数声明的参数为MainWindowViewModel
。
因此,如果您未声明该函数,则编译器将假定它返回int
并具有所有参数int
。
但是,您仍然需要定义该函数,否则链接器将给出错误消息。