編程機制
撰寫程式時必須遵循確切步驟主要是取決于你的計算機環境,因為 C語言是可以移植的,所以它在許多環境中可用,其中包括 UNIX,Linux,Windows等等 ,
不過,讓我們首先來看一看許多環境所共有的一些方面,你完全不必知道運行一個 C 程式后面的事情,但了解一點是一個很好的背景知識,它還可以幫助你理解為什么撰寫一個 C 程式必須經過一些特定步驟,
用 C 語言撰寫一個程式時,你將撰寫的內容保存在一個被稱為源代碼檔案的文本檔案中,
大多數 的系統,都需要該檔案的名稱以 .c 結尾,例如,hello world.c ,名稱中小點前的部分被稱為基本名,小點后的部分被稱為擴展名,因此,hello world 是一個基本名,c 是一個擴展名,組合在一起的 hello world.c 是檔案名,

這樣,在我們提到名稱時內容就可以更具體,我們假定有一個名為 hello world.c 的源檔案,其源代碼如下面所示,
#include
int main ()
{
printf("hello world! ");
return 0;
}

目標代碼檔案、可執行檔案和庫
C語言編程的基本策略是使用程式將源代碼檔案轉換為可執行檔案,此檔案包含可以運行機器語言代碼,
它分兩步完成這一作業:編譯和鏈接,
編譯器將源代碼轉換為中間代碼,聯結器將此中間代碼與其他代碼相結合生成可執行檔案,C 使用被劃分為兩部分的這一方法使程式便于模塊化,
你可分別編譯各個模塊,然后使用聯結器將編譯過的模塊結合起來,這樣,如果需要改變一個模塊,則不必重新編譯所有其他的模塊,同時,聯結器將你的程式與預編譯的庫代碼結合起來,
中間檔案的形式有多種選擇,最一般的選擇,同時也是我們這里講述的實作方式所采取的選擇,是將源代碼轉換為機器語言代碼,將結果放置在一個目標代碼檔案中,
雖然目標檔案包含機器語言代碼,但該檔案還不能運行,目標檔案包含源代碼的轉換結果,但它還不是一個完整的程式,
目標代碼檔案中所缺少的第一個元素是一種叫做啟動代碼(start-up code)的東西,此代碼相當于你的程式和作業系統之間的介面,
例如,你可以在DOS或Linux下運行一個 IBM PC兼容機,在兩種情況中硬體是相同的,所以會使用同樣的目標代碼,但DOS與Linux要使用不同的啟動代碼,因為這兩種系統處理程式的方式是不同的,
所缺少的第二個元素是庫例程的代碼,幾乎所有C程式都利用標準C庫中所包含的例程(稱為函式),
例如,前面的 concrete.c 使用了函式 printf(),目標代碼檔案不包含這一函式的代碼,它只包含宣告使用 printf()函式的指令,實際代碼存盤在另一個稱為“庫”的檔案中,庫檔案中包含許多函式的目標代碼,
聯結器的作用是將【目標代碼】、【系統的標準啟動代碼】和【庫代碼】這3個元素結合在一起,并將它們存放在單個檔案,即可執行檔案中,對庫代碼來說,聯結器只從庫中提取你所使用的函式所需要的代碼,如下圖中的簡單示例:
簡而言之,目標檔案和可執行檔案都是由機器語言指令組成的,但目標檔案只包含你所撰寫的代碼轉換成的機器語言,而可執行檔案還包含你所使用的庫例程以及啟動代碼的機器代碼,

Windows系統的集成開發環境
因為 C 編譯器不是標準 Windows 包的一部分,所以需要獲得并安裝一個 C 編譯器,
許多廠商都會提供基于 Windows的集成開發環境(IDE) ,
所有編譯器都具有用來裝配C程式的快速,集成的開發環境,關鍵的一點是,它們都具有內置的編輯器,可用來撰寫C程式,
這類開發環境一般都提供了讓你可以命名和保存源代碼檔案的選單,以及讓你可以不離開IDE就能編譯和運行程式的選單,如果編譯器發現任何錯誤,會回傳到編輯器中,而且編輯器可以標出有問題的行,并將它們與相應的錯誤訊息匹配起來,例如VC6.0、QT、Visual Studio(簡稱vs),
Windows IDE最初可能讓人有一點望而生畏,因為它們提供多種目標,也就是說,提供了多種可讓程式在其中運行的環境,
例如,它們可能提供16位Windows程式,32位Windows程式,元件檔案(DLL)等等讓你選擇,許多目標都需要引入Windows圖形界面的支持,為了管理這些選項,通常需要創建一個專案,以便隨后向其中添加將要使用的源代碼檔案名,
一般來說,首先使用檔案選單來創建一個新的專案,重要的是選取正確的專案形式,本書中的例子是一般性的例子,設計目的是在一個簡單的命令列環境中運行,
因為 Widnows IDE一般可處理 C 和 C++,所以你應該指明你需要一個C程式,在某些產品,可以使用專案型別來指明希望使用 C,
而在其他一些產品,如 Microsoft Visual C++中,可以使用.c檔案擴展名來指明希望使用 C 而不是 C++,然而,大多數 C 程式也可以作為 C++程式運行,

可能大家在寫完一個程式之后會遇到一個問題:顯示程式執行的視窗在程式終止時突然消失,也就是程式運行后視窗一閃而過,
如果遇到這種情況,那么可以使程式暫停,直到按下 Enter鍵,要做到這一點,請在程式的末尾,恰好在 return 陳述句之前,添加下面的一行:
getchar();
該行讀取一次按鍵,因此程式將暫停直到按下 Enter 鍵時,有時,根據程式函式的需要,可能已經有一個等待按鍵的指令,在這種情況下,需要使用 getchar()兩次:
getchar();
getchar();
例如,如果程式最后做的事情是請你輸入你的體重,那么就應當鍵入你的體重并按 Enter 鍵以輸入資料,
程式將讀取體重,第1個getchar()將讀取 Enter鍵,第2個getchar()將導致程式暫停,直到再次按下 Enter鍵,如果現在你對此還不太理解,那么在學習更多關于 C 輸入的知識后你就明白了,
雖然各種IDE都有許多共同的原則,但在細節方面會因產品而異,而在一個產品系列中,又會因版本而異,你必須要經過一些實踐,才能知道編譯器的正確作業方式,

語言標準
目前,有許多 C 實作方式可用,理想情況下,撰寫 C 程式時,假如該程式末使用機器特定的編程技能,則它在任何實作方式中的運行應該是相同的,要在實踐中做到這一點,不同的實作方式需要遵守一個公認的標準,
首先說明一點,C語言并沒有官方的標準,
不過,Brian Kernighan 和 Dennis Ritchie 撰寫的 The C Programming Language 第1版(1978)成為大家接受的標準,通常稱為 K&R C 或經典 C,
第1個 ANSI/ISO C 標準
隨著 C語言的發展和更加廣泛地用于更多種類的系統上,使用 C 的群體意識到它需要一個更加全面,新穎和嚴格的標準,
為了滿足這一要求,美國國家標準代組織(ANSI)在1983年設立了一個委員會以發展一個新的標準,該標準于1989年正式采用,
這個新標準(ANSI C)定義了語言和一個標準 C 庫,國標標準化組織于1990年采用一個 C 標準 (ISO C ),
ISO C 和 ANSI C 實質上是同一個標準,ANSI/ISO標準最終版本通常被稱為 C89 (因為 ANSI于1989年批準了該標準) 或 C90(因為 ISO 于1990年批準了該標準),然而,因為 ANSI版本是首先出現的,所以人們通常使用ANSI C這一術語,

C99 標準
1994年,修訂標準的作業開始了,這一努力的結果是產生了 C99標準,
一個聯合 ANSI/ISO委員會簽署了 C90標準的最初原則,包括保持言語短小而簡單,他們的意圖不是為語言添加新的特性,而是為了滿足新的目標,
新目標之一是支持國際化編程,
例如,提供了處理國際字符集的方法,第二個目標是“整理現有的慣例以解決明顯的缺點”,因此,在遇到需要將 C 移植到 64 位處理器時,委員會根據在真實生活中處理問題的人的經驗來添加標準,第三個目標是針對科學和工程專案的重要數字計算改進 C 的適應能力,
國際化,修正其不足和改進計算的實用性這三點是主要的面向改變的目標,形成在關于更改的計劃在性質上更加保守,例如,讓與 C90 和 C++ 的不兼容性達到最小,讓語言在概念上保持簡單,肩帶來說就是希望 C++成為重要的和強有力的語言,
結果是 C99 的修改保持了 C 的本質特性,C 繼續是一種簡短,清楚,高效的語言,
書中指出了 C99中的許多修改,因為目前大多數編譯器沒有完全實作所有 C99的修改,所以你可以會發現一些修改在你的系統上不可用,或者你可能會發現,只有修改編譯器的設定以后,才能夠看到一些 C99 的特性,

總結
C 是一種強大,簡潔的編程語言,之所以流行是因為它提供了有用的編程工具和對硬體良好的控制,還因為 C 程式在從一個系統向另一個系統移植方面比大多數程式更容易,C 是一種需要編譯的語言,C 編譯器和聯結器是將 C 語言源代碼轉換成可執行代碼的程式,
用 C 編程可能很費力,困難并讓你感到灰心,但這一作業也可能讓你著迷,興奮和感到滿意,

最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~
【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243101.html
標籤:C
