繁体   English   中英

在C中的main函数中使用静态变量是否有意义?

[英]Does it make sense to use static variables in the main function in C?

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

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

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

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

对我来说,这没有意义。 此变量用于缓冲传入的命令,以便在收到终止字符时处理它们。 但是我之前描述的'static'的两个属性并不适用于main函数,因为main()只调用一次而'never'结束。 所以我的实际问题是:

这可能是使用我不知道的一些hocus-pocus,还是仅仅是从中断或其他函数复制代码,程序员是否忘记了或者没有删除静态关键字?

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

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

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

我认为当你为他们制作包含许多文件和主管的交流项目时,它的价值不会改变....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM