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

在C中调用隐式声明函数时会发生什么?,c,C,我最近在软件中发现了一个与以下警告相关的错误: warning: implicit declaration of function ‘my_func’ [-Wimplicit-function-declaration] 尽管有警告,代码仍在编译和(大部分时间)工作 我的问题是,当代码运行并调用该函数时会发生什么?这是一种未定义的行为,还是我可以假定函数调用是一个no op?假定隐式定义的函数返回int,并接受任意数量的参数。对于实函数,这可能是真的,也可能不是真的 根据您的平台,参数可能以意外

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

warning: implicit declaration of function ‘my_func’ [-Wimplicit-function-declaration]
尽管有警告,代码仍在编译和(大部分时间)工作


我的问题是,当代码运行并调用该函数时会发生什么?这是一种未定义的行为,还是我可以假定函数调用是一个no op?

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


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

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


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

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

因此,如果不声明函数,编译器将假定它返回
int
,并且所有参数都为
int


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

行为不是未定义的,因为编译器没有余地做任何它想做的事情。相反,它将发出一条消息,告诉您的程序是无效程序。当然,当涉及到编译一个无效的程序时,所有的赌注都没有了。如果我的答案对你有效,那么你可以接受它。