Отдельно стоящие GCC и встроенные функции
Документы GCC по адресу http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html говорят (под -ffreestanding
) что автономная среда подразумевает -fno-builtin
, Я мог бы неправильно понять, что такое автономная среда или как она работает, но мне кажется, что, поскольку встроенные функции обычно выдают встроенный код вместо вызова библиотечной функции, это идеально подходит для автономной среды, где стандартная библиотека может отсутствовать функциональность или даже отсутствует полностью.
Так почему бы нам не захотеть использовать билтины с автономной средой?
1 ответ
В автономном режиме компилятор не может полагаться на семантические соображения.
Большинство встроенных функций в GCC работают тихо - например, компилятор видит, что вы используете strcpy()
и в режиме хостинга он может догадаться, что, когда вы используете strcpy()
, вы намереваетесь точно скопировать строку. Тогда это может заменить strcpy
с эквивалентно встроенным расширением, которое лучше для данной цели скопировать строку.
В автономном режиме, используя strcpy()
Функция означает НИЧЕГО. Идея просто не в отсутствии стандартной библиотеки в связке. Идея автономного режима заключается в том, что даже на уровне определения не существует стандартной библиотеки, кроме float.h, iso646.h, limit.h, stdarg.h, stdbool.h, stddef.h, stdint.h (стандарт C99 4.6), Вы можете в автономном режиме решить отформатировать жесткий диск с strcpy
и это совершенно законно для языка Си. Таким образом, компилятор не знает, как использовать встроенные функции, и вообще отказывается их использовать.