打開頭文件 <limits.h> 可以看到字符和各種整數類型的特點。
打開頭文件 <float.h> 可以看到定義。
許多編譯器會報警告。 當 long 整形變量的值在 short 範圍內,變量值不變,當 long 整形變量的值超過 short 時,我測試的是去掉高位,只保留低 8 位的數據賦給 short 整形變量。
不行
char 類型在正常情況下是 unsigned。
沒有區別,位於函數起始部分的變量屬於自動變量,在聲明變量的同時進行初始化和先聲明後賦值只有風格之差。
左邊和之前一樣,右邊會出錯,constant 變量不能進行賦值。
對,除非代碼塊中有嵌套的代碼塊聲明瞭相同名字的變量。
錯,自動整型變量作用域在當前代碼塊中。
不會,在代碼塊中變量聲明爲 static 只會改變它的存儲類型,不會改變作用域和鏈接屬性。
不需要
不會,鏈接屬性從 external 變爲 internal ,但是同一個源文件中還是可以訪問。
不需要,缺省鏈接屬性爲 external。
會,聲明中包含 static 鏈接屬性變爲 internal,其他源文件不能進行訪問。
出現在代碼塊內部時:
a 爲局部變量,存儲類型爲 automatic,每次函數調用時進行初始化,作用域爲當前代碼塊,無鏈接屬性。
出現在代碼塊外部時:
a 爲全局變量,存儲類型爲 static,程序運行前初始化一次,作用域爲當前文件,external 鏈接屬性。
有點讓人困惑的是變量 a,external 鏈接屬性肯定在代碼塊外面,但是作用域 x 可以訪問而 y 不可以,小技巧是把函數 y 放在變量 a 的聲明之前。
不過變量 b 鏈接屬性爲 none 而函數 x、y 都可以訪問,這裏應該是題目有問題,變量 b 的鏈接屬性應該是 internal。
static char b = 2;
void y(){}
int a = 1;
void x()
{
int c = 3;
static float d = 4;
}
錯誤:第 6 行變量 c 的聲明和函數形參中的 c 衝突。下面的比較瑣碎。