相当于Clang中的-fplan9扩展?

Mat*_*ner 8 c gcc clang plan-9

如何-fplan9-extensions在GCC中激活匿名结构/联合行为以在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 *'
Run Code Online (Sandbox Code Playgroud)

Ric*_*ith 8

以下是如何-fplan9-extensions在Clang中获取功能:

  • 确保功能符合Clang扩展七个条件.
  • 邮寄cfe-dev邮件列表,询问Clang社区是否接受实施此扩展的补丁.
  • 熟悉LLVM编码标准.
  • 检查并构建 SVN的LLVM和clang.
  • 制作实现该功能的补丁并将其邮寄到cfe-commits邮件列表.
  • 回复该邮件列表上的评论.对于Clang的第一个补丁,您应该在社区接受之前需要多次修改它.要有耐心,坚持不懈.
  • 如果一切顺利,您的补丁将被检入Clang.

某些-fplan9-extensions功能(struct { Embedded; }部件)已在-fms-extensions参数下可用,但不支持此类匿名成员的指定初始化程序.另一部分在精神上类似于GCC的__attribute__((transparent_union))功能,Clang已经支持.