http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html的海湾合作委员会文件说(在-ffreestanding
下)独立环境意味着-fno-builtin
。我可能误解了一个独立环境是什么或它是如何工作的,但在我看来,由于内置函数通常发出内联代码而不是调用库函数,这对于标准库可能缺失的独立环境来说是理想的。功能甚至完全缺失。
那么为什么我们不想在独立环境中使用biltins?
答案 0 :(得分:15)
在独立模式下,编译器不能依赖于语义考虑。
GCC中的大多数内置程序都在静默工作 - 例如,编译器发现您正在使用strcpy()
,并且在托管模式下,它可能会猜测,当您使用strcpy()
时,您打算完全复制一个字符串。然后它可以用扩展等效的内置替换strcpy
,这对于给定目标复制字符串更好。
在独立模式下,使用strcpy()
功能意味着任何事情。这个想法不是联系中标准库的缺失。独立模式的想法是,即使在定义级别上也没有标准库,除了float.h,iso646.h,limits.h,stdarg.h,stdbool.h,stddef.h,stdint.h(C99标准4.6) 。您可以在独立模式下决定使用strcpy
格式化硬盘,这对于C语言来说是完全合法的。因此,编译器不知道如何使用内置函数,并且它完全拒绝使用它们。