打印

static变量应用疑惑

[复制链接]
4421|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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变量有何作用或者优势?

使用特权

评论回复
5
JerryWu75| | 2012-12-29 17:26 | 只看该作者
static在C语言中的主要作用是,向其他不同的程序文件隐藏该变量,这样其他的程序文件就不能直接访问到该变量,起到对该变量的保护作用,防止其他程序误修改该变量的值.
另外,C程序启动运行时,会对static类型的变量自动赋初值为0,不过这取决于编译器!

使用特权

评论回复
6
magic_yuan|  楼主 | 2012-12-29 17:32 | 只看该作者
JerryWu75 发表于 2012-12-29 17:26
static在C语言中的主要作用是,向其他不同的程序文件隐藏该变量,这样其他的程序文件就不能直接访问到该变量, ...

多谢!
   这里的应用应该有这层意思,慢慢体会。。。。。

使用特权

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

本版积分规则

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

359

主题

2770

帖子

7

粉丝