c語言中區域性變數可以用型別相符的任意表示式來初始化,而全域性變數只能用常量表示式初始化,尤其對於全域性變數來說,不能用乙個數學函式或者其他的需要在執行時才能計算出結果的表示式進行初始化。
因為程式開始執行時要用適當的值來初始化全域性變數,所以初始值必須儲存在編譯生成的可執行檔案中,因此初始值在編譯時就要計算出來,然而有些數學函式例如sin(3.14)的值必須在程式執行時呼叫sin函式才能得到,所以不能用來初始化全域性變數。
編譯時和執行時時兩個不同的概念。c語言為了簡化編譯器的實現,從語法上規定全域性變數只能用常量表示式來初始化。
全域性變數在定義時如果不初始化則值為0.而區域性變數如果定義時不初始化值是不確定的。
C語言全域性變數的初始化
本意是想定義乙個全域性結構體變數,並設定其成變數的值。typedef struct a t a t a a.a 1 error expected asm or attribute before token a.b 2 error expected asm or attribute before to...
未初始化全域性變數
未初始化全域性變數,這名字就很直白,就是 c 程式中定義成全域性作用域而又沒有初始化的變數,我們知道這種變數在程式執行後是被自動初始化為 全0 的。編譯器編譯的時候會將這類變數收集起來集中放置到 bss 段中,這個段只記錄了段長,沒有實際上的內容 全是0,沒必要儲存 在程式被裝載時作業系統會為它分配...
關於未初始化全域性變數
前幾天發現未初始化全域性變數一些特性,後來在一篇部落格上發現有人說過這個問題 這是原博文位址 blog.csdn.net liuqiaoyu080512 article details 8455652 然後結合原博文,自己又做了幾個實驗 以下算是自己實驗一遍以後的總結 首先,自己曾經以為未初化的全域...