2012-05-23 66 views
1

編譯時錯誤我想知道爲什麼下面的代碼不編譯過程中拋出一個錯誤? :不存在時,返回路徑沒有預期收益類型

#include <stdio.h> 
char * func (char *); 

int main() 
{ 
    func("TINFO"); 
    func("INFO"); 
} 

char * func(char * str) 
{ 
    if (str[0] == 'T') 
    return str + 1; 
} 

你看到有從功能不返回一個char *

類似的Java代碼拋出一個編譯時錯誤,但返回路徑。

編譯器使用:

gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
+0

你使用什麼編譯器? – climbage

+0

添加編譯器信息。 – abc

+0

發表您的Java版本,看看錯誤 –

回答

2

根據C標準,6.9.1.12,在到達功能的結束是未定義的行爲僅當呼叫者使用返回值

如果}終止函數已達到,並且函數調用的值由調用方使用,行爲是未定義的。

這就是爲什麼編譯器必須讓這個代碼編譯。

3

所有你需要做的就是提高你的編譯器的「警告」級別。

實施例:

$ gcc -o x x.c 
    <= DEFAULT: No warnings, no errors 

$ gcc -Wall -pedantic -o x x.c 
x.c: In function `main': 
x.c:14: warning: control reaches end of non-void function 
x.c: In function `func': 
x.c:24: warning: control reaches end of non-void function 
+0

但它是一個警告,而不是像什麼Java那樣的錯誤(類似的代碼)。 – abc