2012-12-27 105 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 ..