6

http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html上的 GCC 文档说(在 下-ffreestanding)独立环境意味着-fno-builtin。我可能会误解什么是独立环境或它是如何工作的,但在我看来,由于内置程序通常会发出内联代码而不是调用库函数,这对于可能缺少标准库的独立环境来说是理想的功能甚至完全缺失。

那么为什么我们不想在独立的环境中使用 biltins 呢?

4

1 回答 1

19

在独立模式下,编译器不能依赖语义考虑。

GCC 中的大多数内置函数都以静默方式工作——例如,编译器看到您正在使用strcpy(),并且在托管模式下它可能会猜测,当您使用 时strcpy(),您打算准确地复制一个字符串。然后它可以strcpy用扩展等效的内置函数替换,这对于给定的目标复制字符串更好。

在独立模式下,使用strcpy()功能意味着任何事情。这个想法不仅仅是链接中没有标准库。独立模式的想法是即使在定义级别也没有标准库,除了 float.h、iso646.h、limits.h、stdarg.h、stdbool.h、stddef.h、stdint.h(C99 标准 4.6) . 您可以在独立模式下决定使用 格式化您的硬盘strcpy,这对于 C 语言来说是完全合法的。因此,编译器不知道如何使用内置函数,并且根本拒绝使用它们。

于 2013-09-10T07:52:29.280 回答