2012-12-27 143 views
2

我正在編譯C庫,使用C99。我包括string.h中我的翻譯單元(我可以導航到str的定義casecmp功能在我的NetBeans IDE中函數的隱式聲明'str [n] casecmp'[-Werror =隱式函數聲明]

源看起來是這樣的:?

#include <string.h> 

int foo(char* c1, char* c2){ 
    return strcasecmp(c1,c2); 
} 


int foobar(char* c1, char* c2, int n){ 
    return strncasecmp(c1,c2,n); 
} 

然而,當我嘗試編譯,我得到了標題所示的錯誤

我使用gcc版本4.6.3(Ubuntu的/ Linaro的4.6.3-1ubuntu5)

這是我的GCC命令如下。:

gcc -c -g -Werror -DE4C_THREADSAFE -DLINUX_BUILD -I../include -I../genutils -std=c99 -fPIC -MMD -MP -MF build/Debug/GNU-Linux-x86/btypes.o.d -o build/Debug/GNU-Linux-x86/btypes.o btypes.c 

這是什麼原因造成的,我該如何解決?

+0

如何包含完整的錯誤以及? –

回答

7

這些函數在strings.h中聲明,而不是string.h

+0

這很奇怪......它們在我係統上的/ usr/include/string.h中聲明(Ubuntu 12.0.4) –

+0

但它們隱藏在'#ifdef __USE_BSD'宏下。手冊頁上說應該包含'strings.h' –

+0

是的,謝謝,我剛剛發現他們正在解決(我應該首先檢查的第一件事)。然而,根據這個:http://stackoverflow.com/questions/4291149/difference-between-string-h-and-strings-h,strings.h很大程度上被棄用(與你說的相反) - 你能否詳細說明一下? 。 –

1

包括標題strings.h而不是string.h ..