2

我注意到 GCC 在优化方面非常聪明printf。例如,printf("")从生成的代码中完全删除。printf("\n")替换为putchar('\n')

当我编译这样一个非常小的模块时,我注意到:

extern "C" int printf(const char *__restrict __format, ...);

void f()
{
    printf("\n");
}

gcc -O2调用 toprintf被替换为(putchar('\n')甚至不需要包含任何头文件)。

生成的代码:

f():
        mov     edi, 10
        jmp     putchar

允许执行这些优化的机制是什么?据我所知,标准 C++ 不提供任何允许此类优化的功能。

它可以为用户功能扩展还是在编译器中“硬编码”?

这也意味着如果我想printf用自己的实现重新定义,编译器可能会搞砸。这是真的吗?

4

1 回答 1

1

使用 GCC 编译时,某些函数是内置函数。这意味着它们的实现内置在编译器中,而库版本被忽略。printf就是这样一种功能。

看看http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

于 2013-10-21T16:43:54.390 回答