strdup error on g++ with c++0x

前端 未结 4 1181
情书的邮戳
情书的邮戳 2020-12-17 00:25

I have some C++0x code. I was able to reproduce it below. The code below works fine without -std=c++0x however i need it for my real code.

How do i incl

相关标签:
4条回答
  • 2020-12-17 00:42

    This page explains that strdup is conforming, among others, to the POSIX and BSD standards, and that GNU extensions implement it. Maybe if you compile your code with "-D_GNU_SOURCE" it works?

    EDIT: just to expand a bit, you probably do not need anything else than including cstring on a POSIX system. But you are using GCC on Windows, which is not POSIX, so you need the extra definition to enable strdup.

    0 讨论(0)
  • 2020-12-17 00:58

    strdup may not be included in the library you are linking against (you mentioned mingw). I'm not sure if it's in c++0x or not; I know it's not in earlier versions of C/C++ standards.

    It's a very simple function, and you could just include it in your program (though it's not legal to call it simply "strdup" since all names beginning with "str" and a lowercase letter are reserved for implementation extensions.)

    char *my_strdup(const char *str) {
        size_t len = strlen(str);
        char *x = (char *)malloc(len+1); /* 1 for the null terminator */
        if(!x) return NULL; /* malloc could not allocate memory */
        memcpy(x,str,len+1); /* copy the string into the new buffer */
        return x;
    }
    
    0 讨论(0)
  • 2020-12-17 01:00

    -std=gnu++0x (instead of -std=c++0x) does the trick for me; -D_GNU_SOURCE didn't work (I tried with a cross-compiler, but perhaps it works with other kinds of g++).

    It appears that the default (no -std=... passed) is "GNU C++" and not "strict standard C++", so the flag for "don't change anything except for upgrading to C++11" is -std=gnu++0x, not -std=c++0x; the latter means "upgrade to C++11 and be stricter than by default".

    0 讨论(0)
  • 2020-12-17 01:08

    add this preprocessor "_CRT_NONSTDC_NO_DEPRECATE" to Project Properties->C/C++ Build->GCC C++ Compiler->Preprocessor->Tool Settings

    Don't forget to check Preprocessor Only(-E)

    This worked for me on windows mingw32.

    0 讨论(0)
提交回复
热议问题