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 に答える