我注意到 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
用自己的实现重新定义,编译器可能会搞砸。这是真的吗?