困惑多年,为什么printf可以重定向?

很多人在用printf函数进行串口打印的时候,都会被告知需要重定向fputc函数(别的平台可能不是这个函数),让字符串数据输出到指定串口,按照网上的教程也能很快解决。但是却没人告诉你为什么可以被重定向,为什么明明使用的是printf函数,重定向的却是fputc函数?

使用51的时候,我们也可以使用printf函数,但是我们并没有进行重定向,也能使用,这又是为什么?

对于经验丰富的人来说,这些问题心里应该都有答案,但考虑到有一些道友可能并不了解,所以今天就稍微水那么一篇吧。

attribute((weak)) // 注意两个括号

没见过啊,不懂啊,所以去网上查了一下,不查不要紧,一查吓一跳,发现__attribute__这个东东了不得啊,很多C语言属性都能修改,功能实在是太强大了,强大到我认为掌握得不错的C语言都还只是基础,也就只配在小白面前嘚瑟一下。

言归正传,为了突出重点,今天只讲 weak 属性,以防分心。

我们都知道,函数名不可以重名,当然不同文件内声明的 static 函数倒是可以解除该限制(可查看《C语言之 static》)。

但是如果没有使用 static ,那么编译器就会给你报错,告诉你函数名重复咯。

编译器一共告诉你两个信息:

1、重复的函数名是 func_name

2、重复的地方在 board.c 和 main.c 文件里面(后面 .o 表示目标文件,由对应的 .c 文件生成)

编译器一发出这样的信息,

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值