3种链接属性: 外部(external), 内部(internal),无设置(none)

外部(external): 使用extern关键字

内部(internal): 使用static关键字

如果在不同的文件中定义相同名字的变量,编译器无法通过编译

使用extern可以访问其他文件中定义的变量

使用static标示的变量在文件内部有效,其他文件中无法访问。并且在该文件中无法引用到其他文件的同名称变量

使用extern标示的变量必须已经定义过。

使用static标示的函数,在其他文件中不能访问。

(1)先来介绍它的第一条也是最重要的一条:隐藏。 如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

(3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。

喳喳碎

毕设用了arduino这种傻瓜式不用操心底层的平台感觉是真心爽。说实话,传统单片机的开发还要考虑底层寄存器是真的折磨。明明有那么多轮子可以用还要自己造一个轮子跑,真的是浪费啊。

能根据需要的功能对现有轮子进行使用不是挺好吗?难顶。STM32类的库文件开发才是近似未来。我个人认为以后的开发,会越来越偏向软件吧。希望我能走到那一步。

C++在写类时对不同函数和变量有不同定义,可以定义为public(公开),private(私用)等。这极大的方便了我在调用类时对变量是否可以修改和查询的明确,将类放在不同的文件中也十分明确。但是在C中,这种变量定义在不同文件中让人感到十分模糊。特别是在跨文件访问中需要在H文件中在定义变量中加入extern。