Какие параметры 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
по-прежнему допускает расширения, запрещает только те, которые запрещены в стандарте.