質問

私はWindowsとLinuxの両方でコンパイルする必要があるアプリケーションを構築しています。 MinGWのコンパイラはこれを拒否した以外のアプリケーションはCで書かれている、ほとんどすべてが動作します。

typedef struct somestruct{
   ...snip...
   enum {NODE, REAL} type;
};

somestruct* something;
switch (something->type){
 case NODE:
   ...stuff...;
   break;
 case REAL:
   ...otherstuff...;
   break;
}

これはNODEとREALが定義されていないと言い、 しかし、私はスコープ解決を供給する場合は、

case somestruct::NODE

これはMinGWの3.4.1でコンパイルしますが、Linux上のgcc 4.1.2でコンパイルに失敗します。これは単に、プリプロセッサで解決する必要がありますまたはいくつかの他の説明があり、コンパイラの問題ですか?

役に立ちましたか?

解決

あなたは、ネストを取り除く場合、それは可搬性動作するはずます:

typedef enum somestruct_type {
    somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
   ...snip...
   somestruct_type type;
} somestruct;

私はこれに非常に類似したコードは、CおよびC ++コンパイラの多数に移植することが見てきた。

(私はこれはそれを行うための唯一の方法であるとは言わないよ。私はこの方法が機能することを言っている)。

他のヒント

アプリは「C」で書かれ、まだ有効な「C ++」であるsomestruct::NODEを行うコンパイラの要求ではなく、有効な「C」ます。

結論:あなたがC ++モードでのMinGWでこのコードをコンパイルしているが、Cモードのすべての他のコンパイラと

考えられる原因:MinGWのはfoo.Cを治療し、同じことをfoo.c、そしてあなたのファイルは(UNIX上でC ++を意味する)資本Cの接尾辞で命名されていないことがあります。

解決策:プレーンCコンパイルを強制的にMinGWのに-xcフラグを追加

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top