2012-05-20 82 views
3

GCC disables lots of builtins以严格模式运行时-std=c...为什么GCC在严格模式下不使用内建函数?

外严格ISO C模式(-ansi,-std = C90,-std = C99或-std = C11),所述 功能_exit,ALLOCA,BCMP,bzero ... stpcpy,...可以作为内置函数处理为 。所有这些功能都有相应版本 ,前缀为_ 内置,即使在严格的C90模式下也可以使用。

有什么理由呢? builtin不符合?或者是这是因为标准说,当你打电话给memcpy它实际上应该叫它,我不能被优化?

我觉得我的代码,如果我把它用-std=gnu*,因为它将使一些更重编译可能话,肯定跑得更快optimizations

GCC通常会产生特殊的代码来处理特定的内置功能 更有效;例如,调用ALLOCA可能变得 单个指令直接调整堆栈,并且调用 的memcpy可能变得内嵌拷贝循环

无的 _exitallocabcmpbzerostpcpy或任何的其它功能

回答

4

在那个列表中是在C标准中定义的,所以它们不应该由符合的C编译器来定义;这些名称必须可供用户使用,以获取其自己的标识符。

请注意,许多其他内置插件仍然在严格ISO模式下启用。例如,memcpy被“识别为[a]内置[功能],除非指定​​”

+0

哎哟,你说得对。我想我已经快速阅读了文档并混合了函数列表。但是你的解释仍然存在。谢谢。 –

相关问题