参见英文答案 >
Can printf get replaced by puts automatically in a C program?4个
@H_404_2@请仔细解释一下这段代码:
@H_301_3@#include <stdio.h>
int puts(const char *str) {
fputs("Hello world!\n",stdout);
}
int main() {
printf("Goodbye\n");
}
输出:你好世界!返回13
解决方法
它是编译器特定的.你得到这个行为与
GCC.这里有一些细节.
因为你#include< stdio.h> (实际上是因为你在一个托管环境中),这个放置是C99的标准,重新定义是undefined behavior@H_404_2@> GCC编译器有一些优化将一些printf转换成一系列更快的put.这是合法的,因为您已经包括< stdio.h> (和C99标准定义了在这种情况下printf应该做什么; GCC通过__builtin_printf作为中间步骤)
如果您使用-freestanding编译,则不会观察到.
你的问题非常接近this one;所以this answer也是有关系的.