C 語言編程 — 基本語法

目錄

前文列表

程序編譯流程與 GCC 編譯器編程

C 語言

C 語言是一種通用的、面向過程的高級編程語言。UNIX 操做系統,C 編譯器,和幾乎全部的 UNIX 應用程序都是用 C 語言編寫的。vim

C 語言最先的原型是 ALGOL 60。數組

  • 1963 年,劍橋大學將其發展成爲 CPL(Combined Programing Language)。
  • 1967 年,劍橋大學的 Matin Richards 對 CPL 語言進行了簡化,產生了 BCPL 語言。
  • 1970 年,美國 AT&T 貝爾實驗室(Bell Labs)的 Ken Thompson 將 BCPL 進行了修改,並取名叫作 B 語言,意思是提取 CPL 的精華(Boiling CPL down to its basic good features)。並用 B 語言寫了第一個 UNIX 系統。
  • 1973 年,貝爾實驗室的 Dennis Ritchie(D.M.RITCHIE)在 BCPL 和 B 語言的基礎上設計出了一種新的語言,取 BCPL 中的第二個字母爲名,這就是大名鼎鼎的 C 語言。
  • 隨後不久,UNIX 的內核(Kernel)和應用程序所有用 C 語言改寫,今後,C 語言成爲 UNIX 環境下使用最普遍的主流編程語言。
C 語言的版本

在這裏插入圖片描述

  • 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

    • -std=c99
    • -std=iso9899:1999
  • C11:2011 年發佈了當前最新的 C 語言標準爲 C11,指 ISO 標準 ISO/IEC 9899:2011。此 C11 標準未完成以前的草案,被叫作 C1X。GCC 中指定此版本時所用參數有兩種寫法:函數

    • -std=c11
    • -std=iso9899:2011

ISO 的 C 語言標準,定義了對於 C 語言的兩種實現:動畫

  1. 支持 C 語言的全部庫函數。
  2. 支持 C 語言的基本庫函數(+ 各自版本對應的實現)。
  • 基本庫函數包括:<float.h>,<limits.h>,<stdarg.h>,<stddef.h>
  • AMD1 對應的是:<iso646.h>
  • C99 對應的是:<stdbool.h>,<stdint.h>
  • C11 對應的是:<stdalign.h>,<stdnoreturn.h>

在這裏插入圖片描述

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 的指針操做也給它帶來了不少不安全的因素。C++ 在這方面作了很好的改進,在保留了指針操做的同時又加強了安全性。Java 取消了指針操做,提升了安全性;

  • 類型檢查機制相對較弱、缺乏支持代碼重用的語言結構。

搭建編程環境
  • 操做系統:CentOS7
  • 編輯器:VIM
  • 編譯器:GCC

安裝 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 程序的文件類型

  • .h:頭文件,用於聲明宏、變量、函數,定義類等
  • .c:C 程序源碼文件
  • .cpp:C++ 程序源碼文件

C 語言程序是由函數定義類型定義組成的。所以一個源文件就是一系列的函數和類型。每一個函數均可以調用其餘函數或調用自身(遞歸),可使用任何已經聲明的或內建(C 標準庫)的數據類型。C 語言代碼是從前日後依次執行的,因此你能夠後定義,但必須先聲明。你還能夠調用其餘庫提供的函數,使用庫中提供的數據類型,這也是 C 中多層級系統的複雜性不斷增加的根源。

C 程序主要包括如下部分

  • Tokens(令牌):C 程序由各類令牌組成,令牌能夠是關鍵字、標識符、常量、字符串值,或者是一個符號。
printf("Hello, World! \n");

這五個令牌分別是:

printf
(
"Hello, World! \n"
)
;
  • 預處理器指令:因爲預處理器執行的指令
  • 註釋:使用 ///* ... */ 做爲單行或多行註釋。
  • 函數:完成特定任務的與語句、表達式的集合。
  • 語句、表達式:一行代碼。表達式(Expression)總有值,而語句(Statement)不總有。
  • 標識符:自定義的變量、函數的命名標識,一個標識符以字母 A-Z 或 a-z 或下劃線 _ 開始,後跟若干個字母、下劃線和數字(0-9)。大小寫敏感,使用駝峯風格。
  • 關鍵字:C 中的保留字,這些保留字不能做爲標識符。
  • 換行符:使用 ; 做爲程序換行符(語句結束符),代表一個邏輯實體的結束。
  • 空格:只包含空格的行,被稱爲空白行,可能帶有註釋,C 編譯器會徹底忽略它。
#include <stdio.h>
 
int main()
{
   /* 個人第一個 C 程序 */
   printf("Hello, World! \n");
   
   return 0;
}
  1. 程序的第一行 #include <stdio.h> 是預處理器指令,告訴 C 編譯器在預處理過程當中要包含 stdio.h 文件。
  2. 下一行 int main() 是主函數,程序從這裏開始執行。
  3. 下一行 /*...*/ 是註釋內容,在預處理過程會被忽略。
  4. 下一行 printf(...) 是 C 中的標準函數,會在屏幕上顯示消息 「Hello, World!」。
  5. 下一行 return 0 終止 main() 函數,並返回值 0。
相關文章
相關標籤/搜索