微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以解释这个行为?只有2行代码

参见英文答案 > Can printf get replaced by puts automatically in a C program?4个
请仔细解释一下这段代码
#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
> GCC编译器有一些优化将一些printf转换成一系列更快的put.这是合法的,因为您已经包括< stdio.h> (和C99标准定义了在这种情况下printf应该做什么; GCC通过__builtin_printf作为中间步骤)

如果您使用-freestanding编译,则不会观察到.

你的问题非常接近this one;所以this answer也是有关系的.

原文地址:https://www.jb51.cc/c/111923.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐