2016-02-12 56 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編譯器可以發出警告,但保留向後兼容的功能。 –