close

宣告變數

在使用變數前,我們必須要先建立一個變數(不然哪來變數可以用),也就是「宣告」一個變數的存在。 對於宣告一個變數的存在,我們只要寫下這樣的敘述就可以了:

int a;
    

這樣就會建立一個名稱叫作「a」的變數,然後請注意這個敘述也是以分號做為結尾。 在上面的宣告敘述中,右邊的「a」就是我們所要給予這個變數的識別名稱, 基本上是可以隨意的命名,除了需要遵守一些變數命名的限制以外(稍候解釋); 而左邊的「int」則告訴編譯器這個變數是一個普通的整數(integer)。 int即為integer的簡寫,C語言很喜歡簡寫,寫C程式要習慣常常看到簡寫的東西!

在宣告一個變數後,編譯器會撥出一塊記憶體空間給這個變數使用,同時會記得這個變數的名稱。 這樣我們之後就可以透過這個名稱來使用這個變數,比方說用他來進行數學計算、接收使用者的輸入、或儲存一些暫存資訊等等。 由於篇幅的關係,變數相關的使用方式我們晚點再介紹,這次的主題將以先教你如何宣告建立一個變數為主。 以下將以一個範例來展示變數的宣告以及簡單的使用:

int main(int argc, char *argv[])
{
    /* ==== 宣告變數 ==== */

    int a;        // 在這裡我宣告建立了一個變數「a」。
    int bcd;      // 我建立了另一個變數。
                  // 然而我怕大家被我誤導,以為變數的名稱只能是一個字母,所以這個變數的名稱故意弄的比較長一點。
    int c, d, e;  // 我又宣告了更多的變數,事實上我可以一次建立很多相同類型的變數,只要用逗號把他們隔開。

    /* ==== 使用變數 ==== */

    a = 1;  // 這裡我開始使用變數了。
            // 我先以「等號」來設定變數「a」的內容,由於這是一個整數變數,於是我設定一個數字給它。
            // 經過這個設定的步驟後,從此「a」的內容就是數字「1」了!
            // 另外請注意,在我們指定變數的內容之前,變數的內容是未知的,即可能為任意一個數值。

    // 繼續做別的操作
    bcd = 3;
    c   = 5;
    d   = 7;

    /* ==== 宣告與使用的常見問題 ==== */

    int a;  // 這一行編譯不會通過,因為變數「a」在同一個區域內已經被建立過了,不能重複建立。

    E = 9;  // 這一行編譯不會通過,因為C語言是區分大小寫的,所以編譯器不認識「E」是什麼東西。

    ff = 0;  // 這一行編譯不會通過,因為編譯器也不認識「ff」。
             // 變數的使用一定要在宣告之後;亦及,變數的宣告應該出現在其被使用之前。

    int ff;  // 要記得:變數需要經過宣告建立後才會被認得,也才能被使用。
             // 現在我們在這裡宣告了另一個變數「ff」。

    ff = 0;  // 這一個對變數「ff」的操作出現在它的宣告之後,所以可以正常使用了!

    /* ==== 宣告與初始化 ==== */

    int i = 0;        // 我們可以使用這樣的敘述來一步做到「int i;」、「 i=0;」這兩個敘述所做的事情。
    int j=2, k, l=6;  // 當然,一次宣告並同時初始化多個變數也是可以的!

    return 0;
}
    

經由以上的範例說明,已經簡單的解釋了對於整數變數宣告、以及賦值的方式。

一般在變數的命名上會鼓勵使用具有識別性的名稱,也就是說我們應該儘量為變數取個有意義的名字, 讓人一看就知道某個變數的作用,而不要使用a、b、c…這樣看了不明白其用途的名稱。 那我上面為什麼又要給變數取名a、b、c…呢? 那是因為上面的程式碼僅做為示範如何宣告變數,每一個變數事實上也沒有具體的用途的關係, 於是才流水式的以英文字母為變數命名。

命名的限制

一個變數的名稱可以是一串文字的組合,唯需注意以下限制:

  • 變數名稱僅可為大寫字母、小寫字母、數字、以及底線符號「_」的組合。
    因此變數的名稱中請勿包含空白或其他的特殊符號。
  • 變數名稱的長度基本上沒有限制,實際上則會因為各個編譯器的實做限制而產生限制。
    各個編譯器對於變數名稱的最大長度容忍度不同,早年因為技術上的關係,通常變數名稱不能超過6個字元, 因此才會在一些古老的程式上看見很多過於簡短到難以明白做什麼用的名稱如KNFX、CPXCTN、QUAN等。 現在的編譯器的上限通常都在1024以上,幾乎等於無上限, 因此如果讓變數的名字長一點而可以增加易讀性的話,就請這麼做吧!
  • 變數名稱不能以數字做開頭。
    名稱中可以包含數字,唯不能以數字做開頭,因此var0、var24等是合法的; 而3peoples、12mm等則是不可被接受的。
  • 變數名稱不可與C語言的語法保留字重複。
    比方說變數名稱不可被命名為int、char、return、…等等,C語言全部的保留字請見下面的列舉表格。
C語言語法保留字列表
C89以來就有的C99以來增加的C11以來增加的
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
static
struct
switch
typedef
union
unsigned
void
volatile
while
inline
restrict
_Bool
_Complex
_Imaginary
_Alignas
_Alignof
_Atomic
_Generic
_Noreturn
_Static_assert
_Thread_local

宣告位置的限制

一般來說,變數要在什麼位置上宣告都沒有關係,只要在使用前宣告就可以了。 但是對於C89標準以前的編譯器來說則是有限制的,其所有會被使用的變數必須在最開頭宣告完畢, 而不容許程式執行到一半時宣告新的變數。 這個限制從C99以後就沒有了,但由於目前產業界還有不少地方在使用非常老舊的編譯器, 因此多知道一些老舊編譯器的限制,對於未來可能經手相關程式維護的人還是有幫助的。

重點回顧

  • 在欲使用變數前,請先宣告變數。
  • 在宣告中要指名變數的類型、以及你希望賦予它的識別名稱。
  • 注意C語言是區分大小寫的,同時也要注意變數在命名上的限制。
  • 在變數被設定內容前,它的內容是未知的。
  • 你應該為你的每一個變數起個有意義的名字,讓人一看就知道這個變數的用途。
arrow
arrow
    文章標籤
    C語言教學
    全站熱搜

    夜行者 發表在 痞客邦 留言(0) 人氣()