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