MinGW的gcc报告Cygwin接受的错误

MinGW的gcc报告Cygwin接受的错误,gcc,cygwin,mingw,Gcc,Cygwin,Mingw,当我尝试编译Expstack.c时,MingGW的GCC4.8.1报告了以下错误和更多错误: parser.h:168:20: error: field '__p__environ' declared as a function struct term *environ; 其中'environ'在'struct term{…}'内声明。你发现了什么 char **environ 但是没有一个地方是“环境” 其他一些字段也同样声明,但被接受。与environ相关的后续错

当我尝试编译Expstack.c时,MingGW的GCC4.8.1报告了以下错误和更多错误:

  parser.h:168:20: error: field '__p__environ' declared as a function
        struct term *environ;
其中'environ'在'struct term{…}'内声明。你发现了什么

  char **environ
但是没有一个地方是“环境”

其他一些字段也同样声明,但被接受。与environ相关的后续错误报告如下

  Expstack.c:1170:38: error: expected identifier before '(' token
  case Term_src: return e->item.src->environ;
                                  ^
Cygwin的GCC4.8.3接受这些构造,并在此后的各种版本中接受这些构造 至少是2006年,gcc在这之前已经有了各种版本的Linux

尽管我试图转换为DOS,但源文本还是使用了CRLF,这是我唯一的猜测


我希望有线索或想法来解决这个问题,但重命名字段并不是特别有吸引力,应该是完全不相关的。

这与CR/LF无关

这个名字应该是无关紧要的,但事实并非如此:这一个与MinGW和Cygwin所做的Windows集成有关,正如此人在试图使用一个预期由系统定义的外部环境时所暗示的那样。显然,MinGW开发人员使用此变量的方式打破了将名称用作结构成员的习惯


您应该将此报告为MinGW bug。尽管这可能令人不快,但在此期间,重命名成员是最简单的解决方法。一个位置良好的undef环境可能会有所帮助,但不能保证。

MinGW开发人员不会将其视为一个bug,因为在严格符合ANSI标准的模式下编译时,它没有定义环境。@RossRidge那么OP问题的解决方案不是在这种模式下编译吗?我能建议你在回答中说“如何”吗?