第一個C程式
初寫:2005.03.15, 更新日期:2022.07.06
 
撰寫:曾老師
 
Linux 下C程式的結構:
#include <函式定義檔>
main()
{
    程式;
}

前面所練習的是 Ritchie 經典C程式範例,
一支對自己打招呼的輸出程式,讓我們來瞭解,它的內容架構 :
    我的第一個 C語言程式,檔名請儲存成 myfirstc.c
     /* This is my first C program */
     //  Class 115 No 08 John 
     
    #include <stdio.h>
     main( )
     {
         printf("Hi, This is my first C Program *^_^*") ;
         return 0;
     }

     
  • 程式內容說明:

    • 註解
      程式中純粹說明用途,對程式沒有作用的敘述。
      /*  */ 匡住的程式部分,會當作註解。(區塊註解)
      也可以使用 //,則// 到行末,會被當成註解。(行註解)
      另外,註解還可用來做簡易debug。
      (註解笑話)

    • 前置處理宣告 # include
      C語言是一個可讓使用者「手工」打造的程式語言,
      初學者如果要撰寫控制電腦的程式,首先從輸出顯示開始,
      得先將執行結果訊號輸出顯示到螢幕上,
      假如輸出入IO得從底層硬體去處理,是相當困難的。

      所以,C語言提供標準函式庫,簡化輸出入工作,
      標準函式庫是專業工程師已經寫好定義的程式檔;
      只要在撰寫程式內容前,
      將這些函式庫(其實也是一個文字檔) 包含(include)進來,
      就能直接使用專家做好的函式或副程式功能,
      C也很彈性,可以載入一個、或者多個函式庫檔(需要才去含括)!

      C程式在執行前,會先載入這些定義檔中的程式,
      譬如:printf 函數,是定義在stdio.h這個檔案中,
      stdio 是標準輸入/輸出(Standard Input/Output) 的英文縮簡命名,
      標準輸入/輸出,包括螢幕、鍵盤和檔案等的輸入/輸出。

      載入函式庫有兩種寫法: #include < > 或  #include "  "
      前者,告訴C語言編譯器到系統目錄下尋找系統標頭檔案。
      後者,告訴編譯器由你指定的目錄位置尋找你寫的檔案。
      Windows下, 在你使用的C編譯環境指出完整路徑,
      如:#include "c:\mycfile\mymath.h"
      FreeBSD等類Unix系統,gcc 甚至可以省略#include <stdio.h>,
      因為系統會自動在編譯時加入這函庫。

    • 主程式 main
      C的主程式名稱內定是以 main 命名,
      可以觀察到,C程式是以類似數學函數的形式來構成,
      可簡單用以下寫法:
      main( )

      Linux或類Unix下,可寫成:
      int main()


      以前舊版Turbo C寫成下列:
      main( void ) 或 void main( void )
      void 是無數值無傳回值的意思,
      void寫在main前面, 表示主程式無數值會回傳,
      其實如果宣告int main,在執行時出狀況,可回傳整數值,
      則可以讓作業系統辨認錯誤的狀況,所以這樣的寫法已經少見。


      主程式名稱內定為 main
      而主程式內容範圍是以main以後的 ""、" "大括號所包住的部分。

    • 程式敘述
      每行程式敘述(statement)結尾都要有「 ;
      是告訴 C編譯器,這是一行命令。


    • system("PAUSE"); 和 return 0;的作用
      在Dev C/C++的環境下,其default codes有這兩行,
      同學可測試一下這兩行的作用是什麼呢?


  • 存檔說明
    • 檔名
      一般C語言的程式檔, 是以副檔名來命名辨認.
      所以,存檔時,一定要給予 .c 的副檔名。

      另外,主檔名要注意如下:
      1. 儘量別用中文
        如:我的第一支C程式.c
        因為多數的C編譯器不太支援中文,使用中文如遇上特殊字元時,
        將可能造成指令模式無法抓到檔名去編譯的情況。

      2. 檔名中間避免使用空白或特殊符號
        如:my  first  c.c
        許多同學習慣使用微軟MS系統中,檔名中間可使用空白的習慣,
        儘管有些Linux支援,但仍可能讓gcc編譯時,誤以為是三個參數 ,而出現錯誤!

      3. [建議] 指用英文或數字,且需連著

      在Linux/Unix下,程式檔副檔名如下表:
      副檔名 說  明 處  理 備註
       .c C程式  preprocess, compile, assemble  
       .C C++程式  preprocess, compile, assemble  
       .cc C++程式  preprocess, compile, assemble  
       .cxx C++程式  preprocess, compile, assemble  
       .m C Obj程式  preprocess, compile, assemble  
       .i C前置處理  compile, assemble  
       .ii C++前置處理  compile, assemble  

      在Windows下,Dev-C編譯器會依照程式的副檔名來辨認屬何種語言和處理方式:
      檔名則常見如下:
      .c    為C程式碼(因為Windows環境下檔名不分大小寫)
      .cpp  為C++程式

    • 編譯
      不論是視窗軟體, 或命令模式
      都必須呼叫C的編譯器(Compiler)來編譯程式檔.
      在Unix下, 需輸入:  gcc  檔案名稱.c
      或點選功能選單中的 [執行].
      才能讓C的程式編成執行檔來執行(Execute, 或run).

      一個程式依時間的先後,有以下時期的執行順序:(90年桃竹苗考題)
      (A) Compile time: bind a variable to a type.
      (B) Link time: extern variables in C.
      (C) Load time: bind variables to memory.
      (D) Run time: bind a non-static local variable to memory.
參考資料: