2

タイトルはそれをすべて言います。

Visual Studio の C++ コンパイラで cygwin の gcc のライブラリの一部を使用しようとしていますが、次のコード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

gcc 拡張機能ですか__value? もしそうなら、それは何をしますか? VC++ に相当するものはありますか?

それは逆です。これは VC++ のキーワードですが、 ではありませんgcc

ではgcc単なる識別子です。

于 2013-03-31T06:50:22.320 に答える
3

このリンクは言う

C/C++ 標準では、二重アンダースコアを含む識別子は予約されていると明示的に述べています: ISO.IEC 14882:2003 C++ 標準、セクション 17.4.3.1.2 "グローバル名": "名前と関数シグネチャの特定のセットは常に実装に予約されています: -- 2 つの uderscore (__) を含む名前、またはアンダースコアで始まり、その後に大文字が続く名前 (2.11) は、すべての使用のために実装に予約されています。..."

__valueVisual Studio はC++ のマネージ拡張でキーワードを使用しているように見えるので、名前__valueを別のもの ( など__Value) に変更していただけないでしょうか?

[上記の MSDN リンクには、これが管理されていない C のバグであるかどうかについての議論もあります。Microsoft の回答は、これは「仕様によるもの」であると思われます]

于 2013-03-31T07:11:15.580 に答える