#ifdef适用于Windows+;MSVC,对于Cygwin64+;gcc-为什么?

#ifdef适用于Windows+;MSVC,对于Cygwin64+;gcc-为什么?,gcc,cygwin,environment-variables,c-preprocessor,Gcc,Cygwin,Environment Variables,C Preprocessor,我正在处理的库中使用以下代码: #if defined(_WIN32) && ! defined(__BORLANDC__) _putenv("PO_TEST_FOO=1"); #else putenv(const_cast<char*>("PO_TEST_FOO=1")); #endif #如果已定义(_WIN32)&&!已定义(BORLANDC) _putenv(“PO_TEST_FOO=1”); #否则 putenv(const_cast(“P

我正在处理的库中使用以下代码:

#if defined(_WIN32) && ! defined(__BORLANDC__)
    _putenv("PO_TEST_FOO=1");
#else
    putenv(const_cast<char*>("PO_TEST_FOO=1"));
#endif
#如果已定义(_WIN32)&&!已定义(BORLANDC)
_putenv(“PO_TEST_FOO=1”);
#否则
putenv(const_cast(“PO_TEST_FOO=1”);
#恩迪夫
这适用于Windows+MSVC和Linux+GCC(以及Linux+clang等)。但是-它使用Cygwin64和GCC(链接到appveyor构建日志;GCC版本为v6.4.0)

  • 为什么会失败
  • 它真的应该失败吗,也就是说,是我的错吗
  • 我如何确保它不会(不破坏其他东西)

  • 未在Cygwin上定义WIN32<代码>putenv可用@马特泽里:嗯,我有一些Appveyor版本使用Cygwin64,但它们声称。。。他们与
    putenv()
    决裂,但与
    \u putenv()
    合作@matzeri:等等,也许你是对的,它实际上是mingw而不是Cygwin。我查一下。你有没有包括合适的标题?例如
    stdlib.h
    ?而且,你不需要演员阵容。事实上,这种类型的转换很可能会掩盖错误。@KurtisRader:1。实际上,我只有
    。2.这不是我的代码,所以我没碰过,但听起来你是对的。