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-extensions以下是在 Clang中获取功能的方法:

  • 确保功能满足Clang 扩展的七个标准
  • 邮寄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 回答