C 語言初學教材 - 第一章 程式碼的編排

簡單的例子的程式碼如下

#include <stdio.h>

int main(void)
{
    int month, day, hour, min;
    char *name;
    
    month = 7;
    day = 27;
    hour = 9;
    min = 45;
    name = "kaiching";
    
    printf("\n\n今天是 %d 月 %d 日\n", month, day);
    printf("現在是上午 %d:%d\n", hour, min);
    printf("哈囉, %s!\n\n", name);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:csimple.c
    功能:簡單顯示訊息的例子
    作者:張凱慶
    時間:西元2010年7月 */


我們重新觀察這個程式,函數 main() 中每一行程式碼的結尾都帶分號,如下圖用紅色圈出的部份



因為每一行以分號結尾的程式碼都稱為陳述,函數 (function) 是 C 程式執行的單位,而陳述 (statement) 是函數裡程式碼執行的單位。


C 語言為自由格式的語言,這意思是說用 C 語言寫程式,程式碼可以自由編排,但有些地方必須照既定的方式撰寫,例如函數名稱後必須接帶有參數列的小括弧,底下函數內容必須用大括弧圍起來,以下程式大括弧放的位置不對,所以編譯時會發生錯誤
#include <stdio.h>

int main(void)
{
    int month, day, hour, min;
    char *name;
    
    month = 7;
    day = 27;
    hour = 9;
    min = 45;
    name = "kaiching";
}    

    printf("\n\n今天是 %d 月 %d 日\n", month, day);
    printf("現在是上午 %d:%d\n", hour, min);
    printf("哈囉, %s!\n\n", name);
    
    return 0;

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:ecsimple1.c
    功能:大括弧錯誤的例子
    作者:張凱慶
    時間:西元2010年7月 */


陳述必須以分號作為結束,漏了分號編譯時也會發生錯誤
#include <stdio.h>

int main(void)
{
    int month, day, hour, min;
    char *name;
    
    month = 7;
    day = 27;
    hour = 9
    min = 45;
    name = "kaiching";
    
    printf("\n\n今天是 %d 月 %d 日\n", month, day);
    printf("現在是上午 %d:%d\n", hour, min);
    printf("哈囉, %s!\n\n", name);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:ecsimple2.c
    功能:少了分號的例子
    作者:張凱慶
    時間:西元2010年7月 */


大體上前兩個例子都被稱為語法錯誤 (syntax error) ,由於原始碼中帶有讓編譯器無法解析句型的內容,所以編譯會產生錯誤,也不會產生可執行檔。


其餘只要合乎語法,程式碼可以自由編排,例如,縮排不是必要的,合乎分號作陳述的結尾,分行也不是必要的
#include <stdio.h>
int main(void)
{int month, day, hour, min; char *name; month = 7; day = 27; hour = 9; min = 45; name = "kaiching"; printf("\n\n今天是 %d 月 %d 日\n", month, day); printf("現在是上午 %d:%d\n", hour, min); printf("哈囉, %s!\n\n", name); return 0;}
/* 《程式語言教學誌》的範例程式 
http://pydoing.blogspot.com/
檔名:ocsimple.c
功能:沒有作程式碼縮排的例子
作者:張凱慶
時間:西元2010年7月 */


然而這樣一來,便不容易閱讀程式碼,因此我們傾向提供容易閱讀,並且加上適當註解的程式作為範例。


問題與討論
  1. 嘗試編譯 ecsimple1.c ,你會從編譯器得到什麼訊息呢?
  2. 嘗試編譯 ecsimple2.c ,你會從編譯器得到什麼訊息呢?
  3. 除了語法錯誤外,寫程式還會出現什麼樣的錯誤呢?
  4. 怎麼樣的程式碼編排風格,容易閱讀也容易維護呢?




沒有留言: