2016-11-30 1 views
1

Если я компиляция программы C для голого железа, я знаю, что может вставить вещи, каккомпилятор проверяет, чтобы гарантировать, что я бег в голом железе, а не в среде хостинга

#if defined(__linux__) 
#error "You're not using a cross-compiler." 
#endif` 

Но, Я не хочу проверять каждую операционную систему. Есть ли одна проверка, чтобы увидеть, находится ли я в размещенной среде?

+0

Вы собираетесь собирать на baremetal? –

+0

@ Jean-FrançoisFabre Да. Обновленный вопрос для ясности. – Newtang

+1

Я знаю, что вы компилируете _for_ baremetal, но планируете ли вы запустить компилятор _on_ baremetal. Возможно нет. –

ответ

1

Если вы хотите определить, что вы строите с -ffreestanding, тогда уточните код для макроса __STDC_HOSTED__. Он будет установлен в 1 для обычного кода и будет установлен на 0 для автономной сборки.

См. Информационные страницы GCC или документы. Соответствующая цитата

По умолчанию, он действует как компилятор для размещенного реализации, определение «STDC_HOSTED» как «1» и предполагая, что когда имена функций ISO C используются, они имеют семантика , определенная в стандарте. Чтобы сделать его действующим в качестве автономной автономной версии для автономной среды, используйте опцию '-ffreestanding'; тогда он определяет «STDC_HOSTED 'до' 0 'и не делает предположения о значениях имен функций из стандартной библиотеки , за исключением отмеченных ниже.

Смежные вопросы