`__value`是gcc扩展名,如果是,它会做什么?它是否具有VC ++等价物?

时间:2013-03-31 06:47:02

标签: c visual-c++ gcc visual-studio-2012 cygwin

标题说明了一切。

我正在尝试使用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似乎将其解释为some sort of CLR extension

2 个答案:

答案 0 :(得分:6)

  

__value是否为gcc扩展名,若然,该怎么办?它是否具有VC ++等价物?

反过来说。它是keyword in VC++但不在gcc

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

答案 1 :(得分:3)

link

  

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

由于Visual Studio在Managed Extensions for C ++中使用__value关键字,您是否可以将__value重命名为其他内容(如__Value)?

[上面的MSDN链接也有一个遗憾,这是否是非托管C中的错误,微软回复似乎是“这是设计”]