我可以使用gcc version 4.7.2
编译以下内容 #include <string.h>
int main(){
char text[] = "String duplicate";
char* dup = strdup(text);
return 0;
}
但是当我使用--std = c11标志时,我收到以下警告:
warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
warning: initialization makes pointer from integer without a cast [enabled by default]
导致此警告的原因是什么?
答案 0 :(得分:8)
通过
阅读 strdup 手册man strdup
你可以找到
glibc的功能测试宏要求(参见feature_test_macros(7)):
的strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE&gt; = 500 || _XOPEN_SOURCE&amp;&amp; _XOPEN_SOURCE_EXTENDED || / *由于glibc 2.12:* / _POSIX_C_SOURCE&gt; = 200809L
表示 strdup 符合SVr4,4.3BSD,POSIX.1-2001。
所以你可以通过
摆脱警告gcc -D_BSD_SOURCE -std=c11 <your source file>
我猜这些警告是由c11引起的,不能启用上述宏之一。
答案 1 :(得分:3)
你想要--std = gnu11或--std = c11 -D_GNU_SOURCE