以严格模式-std=c...
运行时的GCC disables lots of builtins。
外部严格的ISO C模式(-ansi,-std = c90,-std = c99或-std = c11), 函数_exit,alloca,bcmp,bzero ... stpcpy,...可以作为。处理 内置功能。所有这些功能都有相应的版本 以_ 内置为前缀,即使在严格的C90模式下也可以使用。
有什么理由吗?内置组件不符合要求吗?或者这是因为标准说当你打电话给memcpy
时它实际上应该调用它并且我无法进行优化?
如果我使用-std=gnu*
重新编译它,我觉得我的代码肯定会运行得更快,因为它会启用更多optimizations
GCC通常会生成特殊代码来处理某些内置函数 功能更有效;例如,对alloca的调用可能会变成 单个指令直接调整堆栈,并调用 memcpy可能会成为内联复制循环
答案 0 :(得分:4)
{C}标准中未定义_exit
,alloca
,bcmp
,bzero
,stpcpy
或该列表中的任何其他功能,所以它们不应该由符合C的编译器定义;这些名称必须可供用户使用,以获取自己的标识符。
请注意,许多其他内置函数仍然在严格的ISO模式下启用。例如,memcpy
被“识别为[a]内置[函数],除非指定-fno-builtin
”