【发布时间】:2014-09-12 20:54:31
【问题描述】:
#include <stdio.h>
int puts(const char* str)
{
return printf("Hiya!\n");
}
int main()
{
printf("Hello world.\n");
return 0;
}
此代码输出“嗨!”运行时。有人能解释一下原因吗?
编译行是:
gcc main.c
编辑:它现在是纯 C,所有无关的东西都已从编译行中删除。
【问题讨论】:
-
不依赖GCC优化选项的It优化。
-
这个问题被标记为
c,尽管编译器调用表明代码被编译为C++。 -
是的,gcc 可以优化从
printf()到puts()的简单常量字符串打印,因为后者性能更好......因为您将标准库 puts() 替换为本地符号,即就是你得到的。如果你使用 -O0 而不是 -O2,你实际上应该调用printf() -
好的,重新标记和编辑标题。
-
顺便说一句,您的代码看起来像 C 代码,但您将其编译为 C++11;你为什么这样做?如果你想用 C++11 编写代码,请使用
std::cout<<"hello world" << std::endl;
标签: c