g++ strerror_r返回类型

#ifdef HAVE_DECL_STRERROR_R
#   ifdef HAVE_STRERROR_R_CHAR_P
    std::string explain_errcode(int errcode) {
        std::vector<char> buffer(0xff);
        do {
            if (strerror_r(errcode, &buffer[0], buffer.size()) != ERANGE)
                return &buffer[0];
            buffer.resize(buffer.size() * 2);
        } while (true);
    }
#   else
    std::string explain_errcode(int errcode) {
        std::vector<char> buffer(0xff);
        do {
            if (strerror_r(errcode, &buffer[0], buffer.size()) != ERANGE)
                return &buffer[0];
            buffer.resize(buffer.size() * 2);
        } while (true);
    }
#   endif
#else

 返回类型在autoconf里测试出来是int,但是g++编译时却成了char*。原因在于autoconf里AC_FUNC_STRERROR_R测试时用的gcc,默认不定义_GNU_SOURCE。而g++则默认定义了_GNU_SOURCE宏(据说libstdc++依赖这个宏)

猜你喜欢

转载自chenqi210.iteye.com/blog/2400395
g++