簡體   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