Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

5.4.6 例: 構造体の構造体

次の例のソースコードを考えてみましょう。

struct bar;

struct foo {
        struct foo *ffp;
        struct bar *fbp;
} *fp;

struct bar {
        struct bar *bbp;
        long        b2;
} *bp;

さまざまな別名レベルに基づくコンパイラの仮定を、次に示します。

  • この例が -xalias_level=weak オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。

  • この例が -xalias_level=layout オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。

  • この例が -xalias_level=strict オプションでコンパイルされる場合、フィールドは別名設定できません。タグが削除されたあとも、2 つの struct の型が異なるからです。

  • この例が -xalias_level=std オプションでコンパイルされる場合、フィールドは別名設定できません。2 つの型とタグが同じではないからです。