5

就我目前对“静态”关键字的理解而言,它可以防止变量被重新初始化,并且可以防止变量在函数结束时离开内存。

在 C 中,我通常在变量不需要是全局变量时使用它,但也不应该在函数调用之间更改。(fi 微控制器中断)

现在,在 STM32 的一些 C 代码中,我看到了以下内容:

int main(void)
{
  static char buffer[CONSOLEBUFFERSIZE];
  ...

对我来说,这没有意义。此变量用于缓冲传入的命令,以便在接收到终止字符时对其进行处理。但是我前面描述的“静态”的两个属性不适用于主函数,因为 main() 只被调用一次并且“永不”结束。所以我的实际问题:

这可能是使用了一些我不知道的恶作剧,还是只是从中断或其他函数中复制代码,而程序员是否忘记或不想删除 static 关键字?

4

3 回答 3

12

一个区别是,静态变量通常使用程序的数据段而不是堆栈。也许这就是声明bufferstatic(特别是如果CONSOLEBUFFERSIZE很大)的原因。

于 2013-08-15T09:28:05.797 回答
3

在某些系统上,堆栈是固定的、有限的大小。在这些情况下static,只需将缓冲区移出堆栈并将其放在已设置链接器以分配更多空间的位置即可。

也可以重新配置链接器以提供更大的初始堆栈,但static更容易并且仍然可以做正确的事情。

于 2013-08-15T09:42:25.417 回答
0

我认为当你为他们制作带有许多文件和电源的交流项目时,它的价值不会改变......

于 2013-08-15T09:32:06.190 回答