#include <stdio.h>
void main()
{
m();
}
void m()
{
printf("hi");
}
Run Code Online (Sandbox Code Playgroud)
产量
hi
警告
main.c:11:10: warning: conflicting types for 'm' [enabled by default]
void m()
^
main.c:7:9: note: previous implicit declaration of 'm' was here
m();
^
Run Code Online (Sandbox Code Playgroud)
为什么这个程序成功运行,即使m()在定义之前被调用?警告的含义是什么?
如果你没有在K&RC/C89中声明一个函数,它会被隐式声明为返回int.因为你的回归void是不匹配的.
如果添加原型:
void m(void);
Run Code Online (Sandbox Code Playgroud)
......在它被召唤之前,它会解决问题.
不,但你可以声明它:
#include <stdio.h>
// declare m()
void m();
void main()
{
// use m()
m();
}
// define m()
void m()
{
printf("hi");
}
Run Code Online (Sandbox Code Playgroud)