2

标题说明了一切。

我正在尝试将 cygwin 的 gcc 中的一些库与 Visual Studio 的 C++ 编译器一起使用,但以下代码C:\cygwin\usr\include\sys\_types.h无法编译:

#ifndef __mbstate_t_defined
/* Conversion state information.  */
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    unsigned char __wchb[4];
  } __value;        /* Value so far.  */
} _mbstate_t;
#endif

构建输出:

1>c:\cygwin\usr\include\sys\_types.h(74): error C4980: '__value' : use of this keyword requires /clr:oldSyntax command line option
1>c:\cygwin\usr\include\sys\_types.h(74): error C2059: syntax error : '__value'

Visual Studio 似乎将其解释为某种 CLR 扩展

4

2 回答 2

6

__valuegcc 扩展,如果是,它有什么作用?它有 VC++ 等价物吗?

这是相反的方式。它是VC++ 中的关键字,但不是gcc.

gcc中,它只是一个标识符。

于 2013-03-31T06:50:22.320 回答
3

这个链接

C/C++ 标准明确表示保留包含双下划线的标识符:ISO.IEC 14882:2003 C++ 标准,第 17.4.3.1.2 节“全局名称”:“某些名称集和函数签名始终保留给实现: -- 每个包含双下划线 (__) 或以下划线后跟大写字母 (2.11) 的名称都保留给实现以供任何使用。..."

由于看起来 Visual Studio 使用__valueC++ 托管扩展中的关键字,您是否可以重命名__value为其他名称(如__Value)?

[上面的 MSDN 链接也讨论了这是否是非托管 C 中的错误,微软的回复似乎是这是“设计使然”]

于 2013-03-31T07:11:15.580 回答