bargagebaobei 发表于 2018-3-5 17:03:55

extern和static

本帖最后由 bargagebaobei 于 2018-3-14 10:47 编辑

在单片机C语言中,总是闹不明白他们的不同和用法

toofree 发表于 2018-3-5 17:49:30

本帖最后由 toofree 于 2018-3-5 17:58 编辑

extern 如果要调用别的文件中的变量或者函数,必须用extern先声明一下。
static静态变量或函数的修饰。所谓静态变量,就是一旦定义则常驻内存,不会随着函数执行完退出而从物理上释放空间。下次调用函数的时候,对应的变量地址还是上次那个地址,内容还是上次那个内容。
用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突。
<2> 静态函数不能被其他文件所用。


butterflyspring 发表于 2018-3-5 17:16:08

extern 调用其他.文件上的变量,编译后自动连接.static如果是函数,则声明函数只在本文件中生存.如果是函数中变量则是第一次调用申请一次,退出函数变量不删,下次进来变量维持之前的值.如果是全局,则是静态....百度一下比别人跟你说,映像会更深.

wenyangzeng 发表于 2018-3-5 17:17:42

extern 可供外部调用变量的修饰
static 静态变量的修饰
楼主应该多仔细阅读C教程

板子粉丝 发表于 2018-3-5 17:50:34

实际调试后,印象会更深刻

bargagebaobei 发表于 2018-3-6 08:06:52

toofree 发表于 2018-3-5 17:49
extern 如果要调用别的文件中的变量或者函数,必须用extern先声明一下。
static静态变量或函数的修饰。所 ...

解释的很详细 谢谢

wudianjun2001 发表于 2018-3-6 09:17:12

一个是外部变量申明,一个是静态变量

Johnson Cao 发表于 2018-3-6 09:25:28

extern声明的变量和函数,必定有另外一个地方定义的.不然编译会报错.
static声明的函数,只能被同一文件中的函数调用.
static声明变量,有两个意思,在函数中的变量,是代表这是一个静态变量,静态变量是存在堆中,而不是栈中.
用static声明全局变量,和函数一个意思,只能被当前文件中的函数所访问.

kirbymore 发表于 2018-3-6 09:32:59

修饰怎么理解?

Angel_YY 发表于 2018-3-6 14:22:03

extern是不同文件之间调用变量或者函数时,在调用者所在文件必须声明的,意思就是告诉编译器这个变量或者函数不在本文件,而是在外部的其他文件。这样编译器编译当前文件的时候就会去其他的.o文件中找到该变量或者文件。
static是静态的变量或者函数,它的声明周期在程序复位之前都有效。
所以可以认为extern扩展了变量或者函数的空间属性,而static扩展了变量或者函数的时间属性。

页: [1] 2
查看完整版本: extern和static