《程序編譯流程與 GCC 編譯器》編程
C 語言C 語言是一種通用的、面向過程的高級編程語言。UNIX 操做系統,C 編譯器,和幾乎全部的 UNIX 應用程序都是用 C 語言編寫的。vim
C 語言最先的原型是 ALGOL 60。數組
K&R C:1978 年,Dennis Ritchie(丹尼斯·裏奇,C 語言之父,UNIX 之父)和 Brian Kernighan(布萊恩·科爾尼幹)合做推出了《The C Programming Language,C 程序設計語言》的初版(按照慣例,經典著做必定有簡稱,該著做簡稱爲 K&R),書末的參考指南(Reference Manual)一節給出了當時 C 語言的完整定義,成爲那時 C 語言事實上的標準,人們稱之爲 K&R C。從這一年之後,C 語言被移植到了各類機型上,並受到了普遍的支持,使 C 語言在當時的軟件開發中幾乎一統天下。安全
C89(ANSI C):隨着 C 語言在多個領域的推廣、應用,一些新的特性不斷被各類編譯器實現並添加進來。因而,創建一個新的 「無歧義的、與具體平臺無關的 C 語言定義」 成爲愈來愈重要的事情。1983 年,ASC X3(ANSI 屬下專門負責信息技術標準化的機構,現已更名爲 INCITS。ANSI,全稱 American National Standard Institute,美國國家標準協會)成立了一個專門的技術委員會 J11(J11 是委員會編號,全稱是 X3J11),負責起草關於 C 語言的標準草案。1989 年,草案被 ANSI 正式經過成爲美國國家標準,被稱爲 C89 標準。數據結構
C90(ISO C):隨後,《The C Programming Language》第二版開始出版發行,書中內容根據 ANSI C(C89)進行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14(ISO/IEC 聯合技術第 I 委員會第 22 分委員會第 14 工做組)的努力下,ISO 批准了 ANSI C 成爲國際標準。因而 ISO C(又稱爲 C90)誕生了。除了標準文檔在印刷編排上的某些細節不一樣外,ISO C(C90)和 ANSI C(C89)在技術上徹底同樣。編程語言
C95:以後,ISO 在 199四、1996 年 分別出版了 C90 的技術勘誤文檔,更正了一些印刷錯誤,並在1995 年經過了一份 C90 的技術補充,對 C90 進行了微小的擴充,通過擴充後的 ISO C 被稱爲 C95。編輯器
C99:1999 年,ANSI 和 ISO 又經過了最新版本的 C 語言標準和技術勘誤文檔,該標準被稱爲 C99。GCC 中指定此版本時所用參數有兩種寫法:ide
C11:2011 年發佈了當前最新的 C 語言標準爲 C11,指 ISO 標準 ISO/IEC 9899:2011。此 C11 標準未完成以前的草案,被叫作 C1X。GCC 中指定此版本時所用參數有兩種寫法:函數
ISO 的 C 語言標準,定義了對於 C 語言的兩種實現:動畫
C 是一門中級語言。它把高級語言的數據結構、語句等特性與低級語言(彙編語言)的實用性結合起來。C 語言能夠像彙編語言同樣對位、字節和地址進行操做,而這三者是計算機最基本的工做單元。
C 是一門結構式語言。結構式語言的顯著特色是代碼及數據的分割化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可以使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具備多種循環、條件語句控制程序流向,從而使程序徹底結構化。
C 語言功能齊全。具備各類各樣的數據類型,並引入了指針概念,可以使程序效率更高。
C 語言具備繪圖能力強,可移植性,並具有很強的數據處理能力,所以適於編寫系統軟件、三維、二維圖形和動畫,支持多種顯示器和驅動器;
既有高級語言的結構和編程環境,又有相似於低級語言(彙編語言)的系統資源操縱能力。目標代碼的執行效率只比彙編低 10~20% ,比其餘高級語言高,適合解決有實時要求的問題;
有豐富的運算符、數據類型和表達式,對程序設計有良好的適應性;
支持以函數爲基礎結構化程序設計、多文件構成及文件獨立編譯,適合大型複雜程序設計;
語言簡潔、緊湊,使用方便、靈活,書寫形式自由;
代碼及可執行程序的可移植性好。
C 語言它的最大的缺點就是,若是你的項目很複雜,大量的開發人員互相之間須要更新大段代碼時,C 語言可能會使事情變得異常麻煩。由於 C 是在面向對象方法流行以前開發的,這大大下降了 C 語言複雜設計的可能性。但這不表明 C 語言作不了大項目,世界上有太多的經典都是用 C 語言完成的,只是說這裏面的複雜度會更高。
輸入輸出相對不少語言都較爲複雜。對於字符串的處理,只能經過字符數組實現。繪圖操做較爲複雜;
C 語言的缺點主要表如今數據的封裝性上,這一點使得 C 在數據的安全性上有很大缺陷,這也是 C 和 C++ 的一大區別;
C 語言的語法限制不太嚴格,對變量的類型約束不嚴格(弱類型語言),影響程序的安全性,對數組下標越界不做檢查等。從應用的角度,C語言比其餘高級語言較難掌握;
指針是 C 語言的一大特點,能夠說是 C 語言優於其它高級語言的一個重要緣由。就是由於它有指針,能夠直接進行靠近硬件的操做,可是 C 的指針操做也給它帶來了不少不安全的因素。C++ 在這方面作了很好的改進,在保留了指針操做的同時又加強了安全性。Java 取消了指針操做,提升了安全性;
類型檢查機制相對較弱、缺乏支持代碼重用的語言結構。
安裝 GCC:
yum install gcc vim -y
查看 GCC 版本:
$ gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) Copyright © 2015 Free Software Foundation, Inc. 本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保; 包括沒有適銷性和某一專用目的下的適用性擔保。
編程:
#include <stdio.h> void main(){ printf("Hello World"); }
編譯:
gcc hello.c -o hello.exe
NOTE:由於 Linux 下可執行文件的後綴僅僅是一種形式,因此可執行文件也能夠不帶後綴。
運行:
./hello.exe基本語法
C 程序的文件類型:
C 語言程序是由函數定義和類型定義組成的。所以一個源文件就是一系列的函數和類型。每一個函數均可以調用其餘函數或調用自身(遞歸),可使用任何已經聲明的或內建(C 標準庫)的數據類型。C 語言代碼是從前日後依次執行的,因此你能夠後定義,但必須先聲明。你還能夠調用其餘庫提供的函數,使用庫中提供的數據類型,這也是 C 中多層級系統的複雜性不斷增加的根源。
C 程序主要包括如下部分:
printf("Hello, World! \n");
這五個令牌分別是:
printf ( "Hello, World! \n" ) ;
//
或 /* ... */
做爲單行或多行註釋。;
做爲程序換行符(語句結束符),代表一個邏輯實體的結束。#include <stdio.h> int main() { /* 個人第一個 C 程序 */ printf("Hello, World! \n"); return 0; }
#include <stdio.h>
是預處理器指令,告訴 C 編譯器在預處理過程當中要包含 stdio.h 文件。int main()
是主函數,程序從這裏開始執行。/*...*/
是註釋內容,在預處理過程會被忽略。printf(...)
是 C 中的標準函數,會在屏幕上顯示消息 「Hello, World!」。return 0
終止 main()
函數,並返回值 0。