函数'gets'的隐式声明在C99中无效

时间:2016-06-15 17:05:56

标签: c

为什么我收到此错误?

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);
    }
}

1 个答案:

答案 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