就我目前对“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/