扩展我的评论:
首先,从来没有使用gets(),因任何原因,即使是在玩具代码。如果您在示例程序中看到它,请忽略该示例并继续。它在C99中已弃用,并在C2011中从标准库中完全删除,因为它是一个主要的安全漏洞。由该功能引起的胃灼热值得打破30多年的遗留代码。
其次,在C89及更早版本下,如果编译器在看到声明或定义之前先看到函数调用,则它将假定函数返回了int-IOW,该函数的隐式声明为int。如果稍后在同一翻译单元中有函数定义,并且函数返回int,则可以:
int foo( void )
{
int x = bar(); // bar *implicitly* declared to return int
}
int bar( void ) // implicit declaration matches definition, we're good
{
return some_integer_value;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果bar没有没有返回int,你会因为隐含得到一个错误int的声明并没有与非匹配int的定义。
gets()不返回char *,int因此不管的隐式声明gets是错误的。
C99 int完全删除了隐式声明-从那时起,必须先声明或定义所有函数,然后才能调用它们。
编辑
您收到该隐式声明错误的最可能原因是您的编译器足够新,因此不再具有getsin 的声明stdio.h。