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

标签 c function static program-entry-point

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

在 C 语言中,我通常在变量不需要是全局变量但不应该在函数调用之间更改时使用它。 (f.i. 微 Controller 中断)

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

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

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

这会不会是在使用一些我不知道的花招,或者它只是从中断或其他函数中复制代码,而程序员是否忘记或懒得删除 static 关键字?

最佳答案

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

关于c - 在 C 的 main 函数中使用静态变量是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249779/

相关文章:

c - 如何在 GtkEntry 中设置占位符文本

jquery - 当取消选中复选框时,找到所有具有匹配类的 div 并将其删除。查询

javascript - TypeScript:初始化嵌套对象的更简单方法?

c - Linux 类似于 Windows 的 SetSystemPowerState?

c - 如何使用 gsasl gssapi 对 Active Directory 进行身份验证?

javascript - jQuery.Deferred 异常 : $(. ..).noUiSlider 不是函数

java - 蓝J错误: Non-static method(OOPoint) cannot be referenced from a static context

C++ 静态类成员未在 * 静态库中初始化 *

c++ - 静态类成员在构造时抛出异常

c - pipe 和 fork : Sharing one file descriptor across multiple children