Какие параметры GCC мне нужны в дополнение к -std и -pedantic-errors для переносимости?

Так что я привык думать, используя -std=c11 а также -pedantic-errors было достаточно, чтобы заставить gcc компилировать только код, который также компилируется на других совместимых со стандартом компиляторах (возможно, на других платформах, при условии, что не используются библиотеки, специфичные для платформы), таких как другие версии gcc или других компиляторов полностью.

Однако, по-видимому, компиляция под Mingw на Windows 7 с обоими -pedantic-errors -std=c11 позволяет компилировать код, который содержит это:

struct foo {
    //(some members)
};
struct bar {
    struct foo; //note the lack of a member name
    //(other members)
};

Что вызывает тот же код, также используя gcc с обоими -pedantic-errors -std=c11 потерпеть неудачу под Ubuntu с error: declaration does not declare anything

Если анонимные члены, такие как, не разрешены в ISO-C11, то почему gcc пропустил этот код в первую очередь? Что я пропускаю о чем -pedantic-errors -std=c11 на самом деле Какие другие параметры (если таковые имеются) мне нужны, чтобы гарантировать, что gcc компилирует только тот код, который достаточно совместим со стандартом, чтобы работать в других версиях gcc, на других платформах и / или других компиляторах, если эти компиляторы сами соответствуют стандарту? Т.е. сделать это согласованным на разных платформах.

Я не спрашиваю, какова цель -pedantic-errors есть, но какой параметр (параметры) может заставить gcc компилировать только код, который будет компилироваться везде (т. е. нет специфичных для gcc расширений или нестандартных вещей, которые не всегда работают). Так -pedantic-errors но еще более строгий, как -pedantic-errors по-прежнему допускает расширения, запрещает только те, которые запрещены в стандарте.

0 ответов

Другие вопросы по тегам