2016-11-26 144 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),现在您只需返回一些东西。