static变量应用疑惑

[复制链接]
 楼主| magic_yuan 发表于 2012-12-29 16:47 | 显示全部楼层 |阅读模式
各位大侠,
   在学习STM32中遇到如下疑惑
   file 1  中C语句如下
     static u8  fac_us=0;  //定义了静态变量参数
    void delay_init(u8 SYSCLK)
{
    SysTick->CTRL&=0xfffffffb;
    fac_us=SYSCLK/8;            
    fac_ms=(u16)fac_us*1000;
}   

在file 2中引用了函数  delay_init(u8 SYSCLK);

问题:1,由file1 可知fac_us为静态变量,其作用范围为file1,若file2中调用则其作用域到了file2中,是不是有问题?(事实证明没问题,或者说因为引用了这个函数,所以函数相关的变量定义也跟着编译过去了?)
           2,个人觉得这里可以用动态变量定义fac_us,不太明白为何这里要采用静态变量的定义。
  这是正点原子(例说STM32程序中的源码)
     十分感谢!

 楼主| magic_yuan 发表于 2012-12-29 16:57 | 显示全部楼层
想了想,是不是这样:
   这里静态变量fac_us的定义是用于delay_init(u8 SYSCLK)以及与此相关的延时函数(上面帖子中没有提,但实际是这样),也就是说其他文件调用这几个函数时,这个静态变量定义依然在这个被调用的函数里有意义且存在。当调用多个此种函数时,就不用将fac_us定义成全局变量了,而仅仅在file1中定义的static型就可以实现单个变量在多个函数中应用。
JerryWu75 发表于 2012-12-29 17:11 | 显示全部楼层
static的作用是定义一个局部变量,你在file1中定义了这个变量,则只能由file1的函数来使用,而file2中的函数是不能直接访问这个变量,如果file2想访问这个变量,则需要调用file1的函数来实现间接访问.
 楼主| magic_yuan 发表于 2012-12-29 17:22 | 显示全部楼层
JerryWu75 发表于 2012-12-29 17:11
static的作用是定义一个局部变量,你在file1中定义了这个变量,则只能由file1的函数来使用,而file2中的函数是 ...

多谢大侠!
   大概确认了我第二个帖的想法。BTW:此中定义static变量有何作用或者优势?
JerryWu75 发表于 2012-12-29 17:26 | 显示全部楼层
static在C语言中的主要作用是,向其他不同的程序文件隐藏该变量,这样其他的程序文件就不能直接访问到该变量,起到对该变量的保护作用,防止其他程序误修改该变量的值.
另外,C程序启动运行时,会对static类型的变量自动赋初值为0,不过这取决于编译器!
 楼主| magic_yuan 发表于 2012-12-29 17:32 | 显示全部楼层
JerryWu75 发表于 2012-12-29 17:26
static在C语言中的主要作用是,向其他不同的程序文件隐藏该变量,这样其他的程序文件就不能直接访问到该变量, ...

多谢!
   这里的应用应该有这层意思,慢慢体会。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部