标题说明了一切。
我正在尝试使用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
答案 0 :(得分:6)
答案 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中的错误,微软回复似乎是“这是设计”]