static in c language
生活随笔
收集整理的這篇文章主要介紹了
static in c language
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里的重點不是靜態(全局/局部)變量、靜態函數,我們從其他角度說一說static.
static關鍵字,針對的是變量和函數,而不是結構。因此,不能對struct、union等結構賦予static屬性,我們來分析一下。
static variable
以下是C程序的內存布局
Memory Layout of C Programs
- 初始化的全局變量,存在initialized data段
- 未初始化的全局變量,存在bss段
- 局部變量,存在stack段
- 動態申請的變量,存在heap段
- 靜態局部/全局變量,初始化的放在data段,未初始化的放在bss段,且初始化為0.
- 靜態全局變量,只能在當前C文件使用
- 靜態局部變量,只能在它所在的代碼塊內使用
需要注意的是,靜態局部變量在函數被調用的時候,變量對應的語句不會被執行。
因此來說,static可以對變量使用!它使得變量的范圍縮小、內容持久且默認初始化為0。
static function
這個沒什么好說的,使用了static attribute的function,作用范圍是當前C文件,其他C文件不可用,就類似于私有。
static 不可用于struct enum等結構
我們需要明白,static作用的對象,必須是存在的
- 對于struct,如果只是定義結構,而沒有定義變量,那么不能使用static,因為它只代表的是自定義數據類型,編譯完就消失了,static是沒有意義的。
上述代碼會報錯的!
static struct mys{int a;int b; } test;上述代碼就沒錯,因為你定義了變量,并且,你其實還可以給這個變量賦值。
static struct mys{int a;int b; } test = {100, 30};union也是同理!
- 其實enum也是一樣的道理,它可能跟struct內部定義不太一樣,但是從外部看,是一樣的!使用static的方式也一樣。
總結
以上是生活随笔為你收集整理的static in c language的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑姬和剑豪谁厉害
- 下一篇: verilator编译 更新文件的规则