​

         其实,今天做的这个小结并不是一个C++的知识点。但是,这个知识点是我在看Arduino的C++代码的时候学到的,因此在此做一个简单的梳理总结。

         在Arduino的main函数中有如下的代码:

475_使用Arduino学习C++之函数的weak属性_库文件

         而这个函数的声明:

475_使用Arduino学习C++之函数的weak属性_库文件_02

         上面的这个声明,涉及到了一个weak的属性。我查了一下网络的信息,其实这个并不是C++的一个功能,而是gcc的一个功能。具体的文档可以参考:​​https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html​

         其实,这个关键词基本上是两个作用。第一个是允许部分未定义的函数以特殊形式存在;第二个是使得函数可以被重写,这样在库文件实现的时候比较有用。

         我做了一个测试:

475_使用Arduino学习C++之函数的weak属性_库文件_03

         编译运行的效果:

475_使用Arduino学习C++之函数的weak属性_c代码_04

         之后,增加相关的函数定义。

475_使用Arduino学习C++之函数的weak属性_c代码_05

         编译运行效果:

475_使用Arduino学习C++之函数的weak属性_c++_06

         这样,相关的用法基本上看明白了。其实,前面说了这不是C++的基础知识,主要还是因为这个特性是由gcc提供的。其实,我测试了同样的C代码,使用gcc而不是g++进行编译,运行的时候也是同样的效果。