2016-01-15 5 views
2

У меня есть проект, в котором цель, вероятно, будет встроенной системой какого-либо типа с компилятором, который, вероятно, является C89 или эквивалентным. Тем не менее, я хотел бы использовать расширения GCC от GNU C.Компиляция GNU C в C89

Есть ли способ сказать GCC для компиляции на C89? Может быть, процесс сборки/разборки?

+0

Хорошо, но расширения gnu, вероятно, не будут работать на компилятор Proprietary EmbedCo –

+0

Кроме того, я знаю, что работа с комментариями работает, не уверен, что это расширение –

+2

Непонятно, почему вы не можете просто использовать GCC для кросс-компиляции для ваша цель, а не использование какого-то древнего компилятора C89. – Michael

ответ

2

Компиляция с C89 не является тем же самым, что и gcc с расширениями, к сожалению. Они на самом деле взаимоисключающие.

Вам необходимо решить, что вы хотите для своего проекта, а затем посмотрите на опции -std = c89 (и, возможно, -педантические) опции gcc, если вы действительно хотите придерживаться C89. Если вы хотите расширения GNU, посмотрите на документы gcc, существует довольно обширный набор параметров для аргумента -std =.

Существует также ряд кросс-компиляторов gcc, посмотрите их и посмотрите, соответствуют ли они вашей встроенной целевой платформе, у вас может быть более простой путь.

+0

Я вижу. Я подумал, что, возможно, GCC действовал как компилятор Glasgow Haskell, а затем расширил язык до чего-то совместимого со стандартом перед компиляцией, и что я мог бы получить это –

+0

@k_g Расширения языка C в основном действительно расширяют язык в том, что они делают ранее невозможные вещи возможны. На самом деле нет способа превратить большинство из них в стандартный код C. – fuz

+0

Это может быть хорошо, но я не знаю о таком удержании в gcc. Если у вас есть что-то, работающее в gcc прямо сейчас, я думаю, что ваш лучший выбор, вероятно, является кросс-компилятором gcc для вашей цели. –

0

Я не знаю о GCC 5 и выше, но до по умолчанию был на самом деле C89 с расширениями GNU.

Если вы хотите явно использовать флаг -std, например -std=gnu89.

См. Options Controlling C Dialect в онлайн-руководстве.


Если вы хотите использовать расширения GNU, вы должны использовать компилятор, который фактически поддерживает их, например GCC. Если вы не хотите использовать расширения GNU, вы можете использовать любой совместимый компилятор.

Также обратите внимание, что GCC очень портативный. Хотя более поздние версии могут не поддерживать вашу целевую платформу, вероятно, есть более ранние версии.

+0

Я думаю, что целью OP является автоматический перевод с некоторой версии C с расширениями GNU на C89 без расширений GNU. – molbdnilo

+0

Это не будет особенно полезно, учитывая, что расширения gnu в любом случае являются gcc. Я хотел бы иметь возможность писать gnu C и компилировать с использованием компилятора c89. –

+0

@k_g Вы пытались построить кросс-компилятор GCC * для своей целевой платформы? Затем вы * можете * использовать расширения GNU. В противном случае вы не сможете. Это так просто. Вы не можете иметь это в обоих направлениях. –