2016-11-26 184 views
-2

我與編譯時,下面的警告「的gcc -ansi -pedantic -Wall conc.c」 我「米做錯了,請幫助GCC C編譯器警告「警告:控制到達......」

謝謝,

conc.c:在函數 '主': conc.c:8:1:警告:控制到達非void函數的端[-Wreturn型]

#include <stdio.h> 
void contract(char s1[], char s2[]); 
int main() 
{ 
    char s1[] = "abcd"; 
    char s2[] = "zzzz"; 
    contract(s1,s2); 
} 

void contract(char s1[], char s2[]) 
{ 
    char temp = 'a'; 
    int i = 0; 
    while (s1[i] != '\0') 
    { 
     temp = s1[i]; 
     i++; 
    } 
    if (i != 2) 
    { 
     s2[0] = s1[0]; 
     s2[1] = '-'; 
     s2[2] = temp; 
    } 
    printf ("\n The first char string is %s \n the shorten one is %s \n",s1,s2); 
} 
+0

簡單搜索您的警告文字會立即給出結果 –

回答

3

您的主函數不會顯式返回任何內容。而就在結束巴掌return 0;和你應該確定:

int main() 
{ 
    char s1[] = "abcd"; 
    char s2[] = "zzzz"; 
    contract(s1,s2); 
    return 0; /* Here! */ 
} 
3

-ansi選項切換到ISO C90標準。當時,main函數不得不返回一些東西。自C99以來,可以省略return語句。

3

當使用-ansi(= C89)你獲得的主返回0的默認行爲,如果你不返回任何東西 - 你定義的非void返回類型(INT),現在您只需返回一些東西。