標籤:
1. 標準C語言
C語言誕生於20世紀70年代,年齡比我們自己還要大,期間產生了很多標準,但是各種編譯器對標準的支援不盡相同。
ANSI C是使用的最廣泛的一個標準,也是第一個正式標準,被稱為“標準C語言”。ANSI C於1980年由美國國家標準局(American National Standards Institute,簡稱ANSI)對外發布,各種編譯器幾乎都完整支援ANSI C,市面上的書籍、大學裡的教材、網上的教程大都以ANSI C為基礎進行講解,C語言中文網也不例外,也以ANSI C為基礎。
在程式中使用的變數名、函數名、標號等統稱為標識符。除庫函數的函數名由系統定義外,其餘都由使用者自訂。
科普一下:
C語言於1972年11月問世,1978年美國電話電報公司(AT&T)貝爾實驗室正式發布C語言,1983年由美國國家標準局 (American National Standards Institute,簡稱ANSI)開始制定C語言標準,於1989年12月完成,並在1990年春天發布,稱之為ANSI C,有時也被稱為 C89 或 C90。
C語言之父——裡奇
在學習C語言之前,我們先瞭解一下C語言的曆史。
C語言是一門通用的,模組化,程式化的程式設計語言,被廣泛應用於作業系統和應用軟體的開發。由於其高效和可移植性,適應於不同硬體和軟體平台,深受開發員的青睞。
C語言早期發展
1969-1973年在美國電話電報公司(AT&T)貝爾實驗室開始了C語言的最初研發。根據C語言的發明者丹尼斯·裡奇 (Dennis Ritchie) 說,C 語言最重要的研發時期是在1972年。
說明:丹尼斯·裡奇(Dennis Ritchie),C語言之父,UNIX之父。1978年與布萊恩·科爾尼幹(Brian Kernighan)一起出版了名著《C程式設計語言(The C Programming Language)》,現在此書已翻譯成多種語言,成為C語言方面最權威的教材之一。2011年10月12日(北京時間為10月13日),丹尼斯·裡奇去世,享年70歲。
C語言之所以命名為C,是因為C語言源自Ken Thompson發明的 B語言,而B語言則源自BCPL語言。
C語言的誕生是和UNIX作業系統的開發密不可分的,原先的UNIX作業系統都是用組合語言寫的,1973年UNIX作業系統的核心用C語言改寫,從此以後,C語言成為編寫作業系統的主要語言。
K&R C
1978年,丹尼斯·裡奇(Dennis Ritchie)和布萊恩·科爾尼幹(Brian Kernighan)出版了一本書,名叫《The C Programming Language》(中文譯名為《C程式設計語言》)。這本書被C語言開發人員們稱為“K&R”,很多年來被當作C語言的非正式的標準說明。人們稱這個版本的C語言為“K&R C”。
1988年丹尼斯·裡奇(Dennis Ritchie)和布萊恩·科爾尼幹(Brian Kernighan)修改此書,出版了《The C Programming Language》第二版,第二版涵蓋了ANSI C語言標準。第二版從此成為大學電腦教育有關C語言的經典教材,多年後也沒再出現過更好的版本。
ANSI C 和 ISO C
1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
為統一C語言版本,1983年美國國家標準局(American National Standards Institute,簡稱ANSI)成立了一個委員會,來制定C語言標準。1989年C語言標準被批准,被稱為ANSI X3.159-1989 "Programming Language C"。這個版本的C語言標準通常被稱為ANSI C。又由於這個版本是 89 年完成制定的,因此也被稱為 C89。
後來 ANSI 把這個標準提交到 ISO(國際化標準組織),1990年被 ISO 採納為國際標準,稱為 ISO C。又因為這個版本是1990年發布的,因此也被稱為C90。
ANSI C(C89) 與 ISO C(C90)內容基本相同,主要是格式組織不一樣。
因為 ANSI 與 ISO 的C標準內容基本相同,所以對於C標準,可以稱為ANSI C,也可以說是ISO C,或者 ANSI / ISO C。
注意:以後大家看到 ANSI C、ISO C、C89、C90,要知道這些標準的內容都是一樣的。
目前,幾乎所有的開發工具都支援 ANSI / ISO C 標準。是C語言用得最廣泛的一個標準版本。
C99
在ANSI C標準確立之後,C語言的規範在很長一段時間內都沒有大的變動。1995年C程式設計語言工作群組對 C語言進行了一些修改,成為後來的1999年發布的 ISO/IEC 9899:1999標準,通常被成為C99。
但是各個公司對C99的支援所表現出來的興趣不同。當GCC和其它一些商業編譯器支援C99的大部分特性的時候,微軟和Borland卻似乎對此不感興趣。
說明:GCC(GNU Compiler Collection,GNU編譯器集合)是一套由GNU工程開發的支援多種程式設計語言的編譯器。
綜上所述,目前廣泛使用的C語言版本是 ANSI / ISO C,最經典的C語言教材是《C程式設計語言(The C Programming Language) 第二版》。
C語言版本更迭史C語言對其它語言的影響
很多程式設計語言都深受C語言的影響,比如C++(原先是C語言的一個擴充)、C#、Java、PHP、Javascript、Perl、LPC和UNIX的C Shell等。
也正因為C語言的影響力,掌握C語言的人,再學其它程式設計語言,大多能很快上手,觸類旁通,很多大學將C語言作為電腦教學的入門語言。
2. 標識符
C語言規定,標識符只能是字母(A~Z, a~z)、數字(0~9)和底線(_)組成的字串,並且其第一個字元必須是字母或底線。 以下標識符是合法的: a, x, x3, BOOK_1, sum5 以下標識符是非法的: 3s 以數字開頭 s*T 出現非法字元* -3x 以減號(-)開頭 bowy-1 出現非法字元減號(-)
在fedora 21 裡面不限制標識符的長度,但它不受gcc編譯器限制,代碼正常執行。
1 #include<stdio.h>2 int main()3 {4 int abcdefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweuihgfdiwehfuiwehfuiwehfiwehfiewhfiuhweihsiuhf=0;5 printf("hello world");6 return 0;7 }
3. 關鍵字
關鍵字是由C語言規定的具有特定意義的字串,通常也稱為保留字。使用者定義的標識符不應與關鍵字相同。
C語言的關鍵字分為以下幾類:
| 分類 |
說明 |
| 類型說明符 |
用於定義、說明變數、函數或其它資料結構的類型。如前面例題中用到的int、double等。 |
| 語句定義符 |
用於表示一個語句的功能。如【例1-3】中用到的if else就是條件陳述式的語句定義符。 |
| 預先處理命令字 |
用於表示一個預先處理命令。如前面各例中用到的include。 |
4. 運算子
C語言中含有相當豐富的運算子。運算子與變數,函數一起組成運算式,表示各種運算功能。運算子由一個或多個字元組成,如加號(+)、減號(-)、乘號(*)等。
5. 分隔字元
在C語言中採用的分隔字元有逗號(,)和空格兩種。逗號主要用在類型說明和函數參數表中,分隔各個變數。空格多用於語句各單詞之間,作間隔符。在關鍵字,標識符之間必須要有一個以上的空格符作間隔,否則將會出現語法錯誤,例如把 int a; 寫成 inta; C語言編譯器會把 inta 當成一個標識符處理,其結果必然出錯。
6. 常量
常量是值不能被改變的量。C語言中使用的常量可分為數字常量、字元常量、字串常量、符號常量、逸出字元等多種。在後面章節中將專門給予介紹。
7.變數
變數由使用者自己命名,用來儲存特定類型的資料,資料可以被改變。資料類型有整數、浮點數、字元等,將在後面章節進行介紹。
8. 注釋
標準C語言的注釋是以“/*”開頭並以“*/”結尾的串。在“/*”和“*/”之間的即為注釋。程式編譯時間,不對注釋作任何處理。注釋可出現在程式中的任何位置。注釋用來向使用者提示或解釋程式的意義。在偵錯工具中對暫不使用的語句也可用注釋符括起來,使翻譯跳過不作處理,待調試結束後再去掉注釋符。
另外,各種編譯器都支援以“//”開頭的注釋,雖然它不是標準C的規定,但是早已成為事實標準,在程式中廣泛使用。“//”僅支援單行注釋,也就是說,注釋中不能出現分行符號;而“/* */”支援多行注釋,注釋中可以出現分行符號。
C語言基本概念