【问题标题】:Freestanding GCC and builtin functions独立的 GCC 和内置函数
【发布时间】:2013-09-10 06:04:21
【问题描述】:

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

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

【问题讨论】:

    标签: gcc built-in freestanding


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是您可以明确地执行以下操作; #define memcpy(x,y,z) __builtin_memcpy((x), (y), (z))
    • 但是,您可以在独立模式下明确执行以下操作; #define memcpy(x,y,z) __builtin_memcpy((x), (y), (z)) 如gcc手册中所述。
    • 此外,在所有情况下,您都可以直接使用 __builtin_xxx,但它不是标准 C,它是 GNU 扩展。沉默的 GCC 内置函数的主要好处是标准上下文替换,保持代码可移植性。如果您不关心合规性,也不关心您的目标可能不支持此内置函数,那么显式内置函数或宏下的使用是不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多