8

-fplan9-extensionsGCC でアクティブ化された匿名の構造体/共用体の動作を Clang で動作させるにはどうすればよいですか?

指定された初期化子を使用しているときに、匿名のメンバーに割り当てるときにエラーが発生し、匿名メンバーの型への自由なキャストが得られません。これらは両方とも、前述の拡張機能が有効になっている GCC で動作します。

typedef struct {int hi;} Embedded;
typedef struct {Embedded;} Encapsulating;

Encapsulating poo = {.hi = 3;};
error: field designator 'hi' does not refer to any field in type 'Encapsulating'

void takes_embedded(Embedded *m);
takes_embedded(&poo);
warning: incompatible pointer types passing 'Encapsuating *' to parameter of type 'Embedded *'
4

1 に答える 1

8

-fplan9-extensionsClang で機能を取得する方法は次のとおりです。

  • 機能がClang 拡張機能の 7 つの基準を満たしていることを確認します。
  • cfe-devメーリング リストにメールを送信して、Clang コミュニティがこの拡張機能を実装するパッチを受け入れるかどうかを尋ねてください。
  • LLVM コーディング標準に慣れてください。
  • SVN から LLVM と clang をチェックアウトしてビルドします。
  • 機能を実装するパッチを作成し、cfe-commitsメーリング リストにメールで送信してください。
  • そのメーリング リストのコメントに返信します。Clang への最初のパッチの場合、コミュニティに受け入れられるまでに何度か修正する必要があると考えてください。忍耐強く、辛抱してください。
  • すべてがうまくいけば、パッチが Clang にチェックインされます。

一部の-fplan9-extensions機能 (struct { Embedded; }部分) は引数の下で既に使用可能ですが、-fms-extensionsそのような匿名メンバーの指定された初期化子はサポートされていません。__attribute__((transparent_union))他の部分は、Clang が既にサポートしているGCC の機能と精神的に似ています。

于 2012-04-30T00:02:51.580 に答える