2011-08-15 34 views
8

Làm cách nào để nhận hành vi cấu trúc/công đoàn ẩn danh được kích hoạt bởi -fplan9-extensions trong GCC để hoạt động trong Clang?Tương đương với -fplan9-phần mở rộng trong Clang?

Tôi nhận được lỗi gán cho các thành viên ẩn danh khi sử dụng trình khởi tạo được chỉ định và tôi không được truyền miễn phí cho loại thành viên ẩn danh. Cả hai công việc này theo GCC với phần mở rộng nói trên được kích hoạt.

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

Tôi nghĩ tốt nhất là không viết mã không hợp lệ C. –

+1

Bạn không thể sử dụng các phần mở rộng của trình biên dịch cụ thể và sau đó hỏi "làm sao nó không hoạt động trên trình biên dịch khác này?" Bạn sẽ cần phải hoặc là dính vào GCC hoặc viết lại mã của bạn để được tiêu chuẩn C. –

+0

@ Chris Lutz: Tôi đã được ấn tượng rằng kêu vang được dự định là một thay thế chủ yếu là thay thế cho GCC. Nó chắc chắn chấp nhận các tùy chọn, nhưng không có gì về nó. –

Trả lời

8

Dưới đây là làm thế nào để có được các chức năng -fplan9-extensions trong Clang:

  • Đảm bảo rằng các chức năng đáp ứng các seven criteria for Clang extensions.
  • Gửi danh sách gửi thư cfe-dev và hỏi xem cộng đồng Clang có chấp nhận bản vá triển khai tiện ích mở rộng này hay không.
  • Tự làm quen với LLVM coding standards.
  • Check out and build LLVM và clang từ SVN.
  • Tạo bản vá triển khai chức năng và gửi nó đến danh sách gửi thư cfe-commits.
  • Trả lời nhận xét về danh sách gửi thư đó. Đối với một bản vá đầu tiên để Clang, bạn nên mong đợi để sửa đổi nó nhiều lần trước khi nó được chấp nhận bởi cộng đồng. Hãy kiên nhẫn và kiên trì.
  • Nếu mọi việc suôn sẻ, bản vá của bạn sẽ được kiểm tra vào Clang.

Một số -fplan9-extensions chức năng (phần struct { Embedded; }) đã được phát hành theo lập luận -fms-extensions, nhưng initializers dành riêng cho thành viên ẩn danh chẳng hạn không được hỗ trợ. Một phần khác tương tự về tinh thần với chức năng __attribute__((transparent_union)) của GCC, mà Clang đã hỗ trợ.

+0

https://33.media.tumblr.com/123e96b4d3019a8b697ca596c07569b0/tumblr_nw52vgYiIN1rz6w0do1_500.gif –

Các vấn đề liên quan