2012-02-04 9 views
0

カプセル化されている(裸の配列ではない)Cで4-d行列型を定義しようとしています。インデックス付きの値または名前付きの構造体メンバを使用してアクセスできます。これは私の試みです:4D行列型で匿名構造を使用するときの警告

typedef union { 
    float m[16]; 
    struct { 
     struct { 
      float x; 
      float y; 
      float z; 
      float w; 
     } x; 
     struct { 
      float x; 
      float y; 
      float z; 
      float w; 
     } y; 
     struct { 
      float x; 
      float y; 
      float z; 
      float w; 
     } z; 
     struct { 
      float x; 
      float y; 
      float z; 
      float w; 
     } w; 
    }; // warning here "Declaration does not declare anything" 
} Matrix4; 

これは動作しますが、私が原因匿名(無名の)構造体への警告が表示されます。私は明らかに4つの内部構造体を保持するためだけにそのコンテナ構造体に名前をつけたくありません。

このページは私がこれを行うことができることを暗示していますか? http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields

それは実際に仕事に思えるが、そう、この間違っている、またはそうでない場合は、どのように私は警告を取り除く必要がありますか?

私はLLVM GCC 4.2を使用しています。

ありがとうございました。

答えて

1

匿名の構造体と共用体が許可されました(C11以降)。より新しいコンパイラに移行するにつれ、最終的にはあなたの心配はなくなります。 GCCでは、-std=c1xを追加します。

+0

ありがとうございました。このフラグを現在のビルドに追加すると、既に標準が変更されていますか?あるいは、これを得るためにGCCのそれ以降のバージョンを使う必要があるでしょうか? (また、これはこの質問の対象外ですが、わかっているのであれば、C11に切り替えることで、コードベースで他のものを破る可能性はどれくらいですか?) –

+0

GCCのどのバージョンがサポートを開始したのかよくわかりませんこの方言。マニュアルを確認する必要があります。私は何かが "壊れる"ことを疑う。 C11標準の「変更を破る」セクションをチェックして、それが現在適合している標準と比較する必要があります。 –

+0

十分に公正です。ありがとう。 –

関連する問題