12

-fms-extensionsGCCには、匿名の構造体メンバーの使用を許可するオプションがあります。

struct a {
    int x;
}

struct b {
    int y;
    struct a;
}

これにより、を使用するだけでx要素にアクセスできます。これは非常に便利ですが、GCCによってエミュレートされているMicrosoftの拡張機能のようです。struct bb.x

このオプションを使用すると、コードの移植性が低下しますか、それとも「安全」に使用できると見なされますか?

4

3 に答える 3

14

互換性を求めている場合は、緩いコンパイラ オプションを厳密に設定することは決して良い考えではありません。

于 2012-12-31T20:54:26.200 に答える
7

2011 年版の標準 (C11) で匿名構造体と共用体と呼ばれる同等の機能が C に追加されたことを考えると、この機能を使用することはそれほど悪い考えではないと思います。MS コンパイラはそれをサポートし、GCC および "GNU C" 互換コンパイラは要求された場合にそれをサポートし、最新の標準に準拠する新しいコンパイラはそれをサポートします。

于 2012-12-31T23:43:53.023 に答える
4

フラグ -fms-extensions は、「Microsoft ヘッダー ファイルで使用されている一部の非標準構造を受け入れる」ために使用されます。GCC はさまざまな標準用に作成されているため強力なので、適切な状況でそれを使用することは悪い考えではないと思います。

于 2012-12-31T20:56:36.760 に答える