3

在严格模式下运行时,GCC会禁用许多内置函数-std=c...

在严格的 ISO C 模式(-ansi、-std=c90、-std=c99 或 -std=c11)之外,函数 _exit、alloca、bcmp、bzero ... stpcpy,... 可以作为内置函数处理. 所有这些函数都有相应的版本前缀_builtin,即使在严格的 C90 模式下也可以使用。

有什么理由吗?内置函数不符合吗?或者这是因为标准说当你调用memcpy它时应该实际调用它并且我无法优化?

我觉得如果我使用重新编译它,我的代码肯定会运行得更快,-std=gnu*因为它会启用更多优化

GCC 通常会生成特殊代码来更有效地处理某些内置函数;例如,对 alloca 的调用可能成为直接调整堆栈的单个指令,对 memcpy 的调用可能成为内联复制循环

4

1 回答 1

4

_exit, alloca, bcmp, bzero,或该列表中的任何其他函数均未stpcpy在 C 标准中定义,因此它们不应由符合标准的 C 编译器定义;这些名称必须可供用户用作他们自己的标识符。

请注意,在严格 ISO 模式下仍启用许多其他内置功能。例如, “除非指定,否则被memcpy识别为 [a] 内置 [function] ”-fno-builtin

于 2012-05-20T19:55:09.307 回答