我在用utarray(它是uthash library的一部分)做一个项目。每当我包含它时,就会出现以下错误:
utarray.h:221:3: error: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
不可否认,我在编译(
-Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99
)时使用了一些非常激进的标志,但我不明白为什么这应该是一个错误。strdup
在string.h
中定义(根据man strdup
),这在utarray.h
中包含得非常清楚。我做错什么了?谷歌没有帮助。(显然没有其他人试图用这些标志编译
utarray.h
)下面是一个无法编译的示例文件(使用
gcc -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99 scratch.c
)。#include "utarray.h"
int main(int argc, char *argv[]) {
(void)argc;
(void)argv;
return 0;
}
版本:GCC4.9.2、glibc 2.21、uthash 1.9.9
最佳答案
问题是strdup()
不是c标准函数它是POSIX函数,使用-std=c99
时不能使用strdup()
,除非将以下-D_POSIX_C_SOURCE=200809L
添加到编译命令中
gcc -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99 -D_POSIX_C_SOURCE=200809L
关于c - utarray.h中的“函数的隐式声明”(uthash的一部分),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28994015/