很多人在用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 文件生成)
编译器一发出这样的信息,