12

我可以使用 gcc 版本 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]

什么变化导致了这个警告?

4

2 回答 2

9

阅读strdup的手册

man strdup

你可以发现

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>

我猜这些警告是由 c11 未启用上述宏之一引起的。

于 2013-10-28T17:54:36.447 回答
5

你想要 --std=gnu11 或 --std=c11 -D_GNU_SOURCE

于 2013-12-01T22:43:46.317 回答