请解释一下这个片段:
#include <stdio.h>
int puts(const char *str) {
fputs("Hello world!\n", stdout);
}
int main() {
printf("Goodbye\n");
}
输出 :Hello world!
返回 13
它是编译器特定的。你会得到这种行为GCC http://gcc.gnu.org/。以下是一些细节。
自从你#include <stdio.h>
(实际上是因为您处于托管环境中)puts
是C99标准的标准,重新定义它是未定义的行为 http://en.wikipedia.org/wiki/Undefined_behavior
GCC 编译器有一些优化来转换一些printf
到一个序列faster puts
。这是合法的,因为您已经包括了<stdio.h>
(C99 标准定义了什么printf
在这种情况下应该这样做;海湾合作委员会通过__builtin_printf
作为中间步骤)
如果你编译-ffreestanding
你不会观察到这一点。
你的问题非常接近this one https://stackoverflow.com/q/25816659/841108; so 这个答案 https://stackoverflow.com/a/25816706/841108也相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)