打印
[研电赛技术支持]

单片机---静态变量使用

[复制链接]
306|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljiu|  楼主 | 2023-7-18 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
静态变量有两种:

文件作用域静态变量

文件作用域的静态变量定义在函数外,只能在当前文件内使用,不能在其他文件中使用。它的作用域是整个文件,存储在数据段或BSS段中。

示例代码:

static int i = 0; // 文件作用域静态变量
int main() {
    // code
}
2. 函数作用域静态变量

函数作用域的静态变量定义在函数内,但其生命周期延长到整个程序结束。每次函数执行时,都会保持上一次执行时的值不变。存储在数据段或BSS段中。

示例代码:

void Func() {
    static int i = 0; // 函数作用域静态变量
    i++;
    printf("%d\n", i);
}
int main() {
    Func(); // Output: 1
    Func(); // Output: 2
    Func(); // Output: 3
    return 0;
}
静态变量的作用域与生命周期不同于自动变量(局部变量)。静态变量在程序运行期间始终存在,一旦初始化后,其值不会被销毁。需要注意的是,静态变量使用不当可能会影响程序的效率和占用的内存空间。

函数作用域静态变量实际上是在函数作用域内定义的全局变量,只是作用域限制在该函数内部,不能被同一文件中其他函数调用,也不能被其他文件调用。

与普通全局变量不同的是,函数作用域静态变量只能在定义它的函数内进行访问,且在函数定义时就已经被初始化,而不是像普通全局变量需要被显式初始化或初始化值默认为0。

总之,函数作用域静态变量虽然在某种意义上类似于全局变量,但是它们仍然各自存在于各自的函数作用域中,生命周期也受到函数调用等限制。
————————————————
版权声明:本文为CSDN博主「嵌入式小宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53592457/article/details/131075902

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

3322

帖子

3

粉丝