相当于 Clang 中的 -fplan9-extensions 吗?

发布于 2024-11-29 10:40:18 字数 662 浏览 0 评论 0原文

如何获得 -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 *'

How do I get the anonymous struct/union behaviour activated by -fplan9-extensions in GCC to work in Clang?

I'm getting errors assigning to members of anonymous when using designated initializers, and I'm not getting the free casting to the type of an anonymous member. Both these work under GCC with the aforementioned extension activated.

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 *'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无边思念无边月 2024-12-06 10:40:18

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

  • 确保该功能满足 Clang 扩展的七个标准
  • 邮寄 cfe-dev 邮件列表并询问 Clang 社区是否接受实现此扩展的补丁。
  • 熟悉 LLVM 编码标准
  • 查看并构建来自 SVN 的 LLVM 和 clang。
  • 制作一个实现该功能的补丁并将其邮寄到 cfe-commits 邮件列表。
  • 回复该邮件列表上的评论。对于 Clang 的第一个补丁,您应该预计需要对其进行多次修改才能被社区接受。要有耐心并坚持下去。
  • 如果一切顺利,您的补丁将被签入 Clang。

一些 -fplan9-extensions 功能(struct { Embedded; } 部分)已在 -fms-extensions 参数下可用,但是不支持为此类匿名成员指定初始值设定项。另一部分在本质上与 GCC 的 __attribute__((transparent_union)) 功能类似,Clang 已经支持该功能。

Here's how to get the -fplan9-extensions functionality in Clang:

  • Ensure that the functionality meets the seven criteria for Clang extensions.
  • Mail the cfe-dev mailing list and ask whether the Clang community would accept a patch implementing this extension.
  • Familiarize yourself with the LLVM coding standards.
  • Check out and build LLVM and clang from SVN.
  • Make a patch implementing the functionality and mail it to the cfe-commits mailing list.
  • Respond to comments on that mailing list. For a first patch to Clang, you should expect to need to revise it several times before it is accepted by the community. Be patient and persevere.
  • If all goes well, your patch will be checked into Clang.

Some of the -fplan9-extensions functionality (the struct { Embedded; } part) is already available under the -fms-extensions argument, but designated initializers for such anonymous members are not supported. The other part is similar in spirit to GCC's __attribute__((transparent_union)) functionality, which Clang already supports.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文