Эквивалентно -fplan9-расширениям в Clang?
Как мне активировать анонимное поведение struct/union?-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 *'
1 ответ
Вот как можно получить -fplan9-extensions
Функциональность в Clang:
- Убедитесь, что функциональность соответствует семи критериям для расширений Clang.
- Отправьте по почте список рассылки cfe-dev и спросите, примет ли сообщество Clang патч, реализующий это расширение.
- Ознакомьтесь со стандартами кодирования LLVM.
- Проверьте и соберите LLVM и лязгите из SVN.
- Сделайте патч, реализующий эту функциональность, и отправьте его по почте в список рассылки cfe-commits.
- Ответить на комментарии в этом списке рассылки. Что касается первого патча для Clang, вам следует ожидать его пересмотра несколько раз, прежде чем он будет принят сообществом. Будьте терпеливы и настойчивы.
- Если все пойдет хорошо, ваш патч будет проверен на Clang.
Некоторые из -fplan9-extensions
функциональность (struct { Embedded; }
часть) уже доступна под -fms-extensions
аргумент, но назначенные инициализаторы для таких анонимных членов не поддерживаются. Другая часть похожа по духу на GCC __attribute__((transparent_union))
функциональность, которую Clang уже поддерживает.