2016-02-12 82 views
1

这是我的代码(简化):为什么GCC是complaing约gets()函数

#include <stdio.h> 
#include <string.h> 

#define SIZE 240 

int main(void) 
{ 
    char word[SIZE]; 
    gets(word); 

    return 0; 
} 

为什么GCC是给我

№3.c: In function ‘main’: №3.c:13:2: warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration]

此警告?

GCC vesion is 5.2.1

P.S.The程序正在工作。

P.P.S.我不会使用gets(),我将永远不会使用gets(),我将永远不会使用gets(),我将永远不会使用gets()

+4

GCC的哪个版本?版本5和更高版本使用C11作为默认方言(使用GCC扩展),这意味着'gets'实际上不再存在(它已在C11标准中删除)。 –

+0

@JoachimPileborg:~~编译这个程序时GCC 5仍然不会产生警告,尽管(并且它编译)~~。从头开始说,我的系统是borked。 :( –

+0

@JoachimPileborg问题更新 – Zhigalin

回答

5

函数gets不再受C标准支持,因为它是一个不安全的功能。所以看起来功能声明被排除在标题<stdio.h>之外,现在编译器不知道什么是gets的声明。

从C标准(前言)

6第三版取消和代替第二版,ISO/IEC 9899:1999,由ISO/IEC 9899作为校正:1999 /肺心病1:2001 ,ISO/IEC 9899:1999/Cor 2:2004和ISO/IEC 9899:1999/Cor 3:2007。从以前的版本的主要变化 包括:

...

— removed the gets function (<stdio.h>) 
+0

如果是这样,为什么它工作? – Zhigalin

+0

@Zhigalin编译器可以发出警告,但保留向后兼容的功能。 –