为什么我收到此错误?
implicit declaration of function 'gets' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct myStruct
{
char name[20];
char tel[20];
}contact;
int main(void)
{
contact *mycont[3];
for(int i=0; i<3; i++)
{
mycont[i] = (contact*)malloc(sizeof(contact));
printf("Enter Name Of The Contact No.%d\n",i+1);
gets(mycont[i]->name);
printf("Enter The Contact Telephone Number\n");
gets(mycont[i]->tel);
}
}
答案 0 :(得分:1)
可以肯定的是,即使错误消息 mentions C99
,您实际上仍在使用遵循以后标准的编译器。 gets
已被删除,而不只是被弃用。
例如,当我尝试编译以下简单程序时:
#include <stdio.h>
char buff[1000];
int main(void) {
gets(buff);
return 0;
}
在Ubuntu 18.04下带有clang
:
clang -Werror --std=c11 -o qq qq.c
我收到相同错误:
qq.c:4:2: error: implicit declaration of function 'gets' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
实际上,它仅与切线和删除gets
(与切线有关)(不再在任何地方声明)。根据{{1}}(释义),您应该尝试在没有有效声明的情况下不尝试使用 any 函数:
第二版取消并替代了C90,并由其他各种ISO gumpf进行了修订和更正。与上一版相比,主要变化包括:
删除隐式函数声明。
很多其他问题,与这个问题无关。
如果将ISO C99 Foreword /5
替换为gets
,则会看到此错误,这会导致相同的错误:
xyzzy
实际上,如果您实际上尝试使用设置了qq.c:4:2: error: implicit declaration of function 'xyzzy' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
标志的gets
,则会得到完全 different 的消息(如果编译器则根本没有消息)在弃用C99
之前实现C99-直到TC3才完成):
gets