1. 程式人生 > >C語言全域性變數初始化、資料型別長度

C語言全域性變數初始化、資料型別長度

今天在工作中遇到兩個問題,記錄下來:

1. 定義了一個全域性變數,然後初始化,編譯的時候編譯不通過。如下:

int a;

a = 5;

編譯的時候一直報錯,且說下面的a沒有定義型別,預設類似是int。

後面才發現全域性變數不能再全域性初始化,要初始化則在定義的時候初始化,如下:

int a=5;

不能再全域性初始化的原因是:全域性初始化語句在開始執行的時候初始化,如果一個變數在全域性有兩次初始化則導致執行的時候系統不知道那一次先執行,最後初始化的值是不定的。

全域性變數可以放在函式中初始化:

void init_global()

{

a = 5;

}

2. 

int a = 1024  *  1024;

int b = 1024 * 1024;

unsinged long  long  c = a * b;

則c得到的不是想要的值,是a * b 後溢位的值,本來64位是放的下 a * b的值。原因是a * b 的時候就溢位,如果把 a 或者 b 中的一個值改為unsinged long  long,則不會有問題。