-
1 # 驄耀說外貿
-
2 # 河南新華LYX
C語言是一門面向過程、抽象化的通用程式設計語言,廣泛應用於底層開發,C語言能以簡易的方式編譯、處理低階儲存器,並且C語言還具有僅產生少量的機器語言,和不需要任何執行環境支援就可以執行等特點;
說到C語言的應用,最著名的應用領域應該就是作業系統了,目前的作業系統核心可以說都是C語言編寫的,像Unix和Linux,其次在微控制器上C語言的表現也稱得上是獨步天下;
這主要得益於C語言在位操作上的優越性,雖然現在也出現了一些用其他程式語言操作微控制器的方法,但都是用C語言封裝過的,其核心可以說還是C語言;
另外,我們平常用的驅動程式、編譯器、系統服務等,很多也都是用C語言編寫的,但在具體的應用軟體領域,由於C語言不具備成熟的開發框架,所以一般不用來開發大型的應用程式。
-
3 # 易召102
一種比較底層的高階開發語言。作業系統(LINUX,WINDOWS)都是用它結合彙編開發出來的。很多著名軟體也都是用它開發出來的。一些程式語言最初也是用C開發出來的。
-
4 # 普通字
就是漢語,因為Chinese首字母是 C,所以簡稱c語言。因此用c語言程式設計也叫中文程式設計。漢字有一二三和壹貳叄的分別,這種性質被說成c語言是區分大小寫的。漢語可以把“沒掙到錢”說成“掙到了個錘子”,所以說c語言是弱型別語言。
-
5 # 磨具磨料老王
c語言(計算機語言)
C語言是一門面向過程的、抽象化的通用程式設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低階儲存器。C語言是僅產生少量的機器語言以及不需要任何執行環境支援便能執行的高效率程式設計語言。儘管C語言提供了許多低階處理的功能,但仍然保持著跨平臺的特性,以一個標準規格寫出的C語言程式可在包括類似嵌入式處理器以及超級計算機等作業平臺的許多計算機平臺上進行編譯。
當前階段,在程式設計領域中,C語言的運用非常之多,它兼顧了高階語言和組合語言的優點,相較於其它程式語言具有較大優勢。計算機系統設計以及應用程式編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機作業系統中都能夠得到適用,且效率顯著。 [3]
C語言擁有經過了漫長髮展歷史的完整的理論體系,在程式語言中具有舉足輕重的地位。
C語言誕生於美國的貝爾實驗室,由丹尼斯·裡奇(Dennis MacAlistair Ritchie)以肯·湯普森(Kenneth Lane Thompson)設計的B語言為基礎發展而來,在它的主體設計完成後,湯普遜和裡奇用它完全重寫了UNIX,且隨著UNIX的發展,c語言也得到了不斷的完善。為了利於C語言的全面推廣,許多專家學者和硬體廠商聯合組成了C語言標準委員會,並在之後的1989年,誕生了第一個完備的C標準,簡稱“C89”,也就是“ANSI C”,截至2020年,最新的C語言標準為2018年6月釋出的“C18”。 [5]
C語言之所以命名為C,是因為C語言源自Ken Thompson發明的B語言,而B語言則源自BCPL語言。
1967年,劍橋大學的Martin Richards對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Programming Language)語言。
20世紀60年代,美國AT&T公司貝爾實驗室(AT&T Bell Laboratories)的研究員肯·湯普森(Kenneth Lane Thompson)閒來無事,手癢難耐,想玩一個他自己編的,模擬在太陽系航行的電子遊戲——Space Travel。他揹著老闆,找到了臺空閒的小型計算機——PDP-7。但這臺電腦沒有作業系統,而遊戲必須使用作業系統的一些功能,於是他著手為PDP-7開發作業系統。後來,這個作業系統被命名為——UNICS(Uniplexed Information and Computing Service)。
1969年,美國貝爾實驗室的Ken Thompson,以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母),並且用B語言寫了初版UNIX作業系統(叫UNICS)。
1971年,同樣酷愛Space Travel的丹尼斯·裡奇為了能早點兒玩上游戲,加入了湯普森的開發專案,合作開發UNIX。他的主要工作是改造B語言,使其更成熟。 [6]
1972年,美國貝爾實驗室的丹尼斯·裡奇在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
1973年初,C語言的主體完成。湯普森和裡奇迫不及待地開始用它完全重寫了UNIX。此時,程式設計的樂趣使他們已經完全忘記了那個“Space Travel”,一門心思地投入到了UNIX和C語言的開發中。隨著UNIX的發展,C語言自身也在不斷地完善。直到2020年,各種版本的UNIX核心和周邊工具仍然使用C語言作為最主要的開發語言,其中還有不少繼承湯普遜和裡奇之手的程式碼。 [6]
在開發中,他們還考慮把UNIX移植到其他型別的計算機上使用。C語言強大的移植性(Portability)在此顯現。機器語言和組合語言都不具有移植性,為x86開發的程式,不可能在Alpha、SPARC和ARM等機器上執行。而C語言程式則可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C原始碼編譯、連線成目標二進位制檔案之後即可在哪種架構的處理器執行。 [6]
1977年,丹尼斯·裡奇發表了不依賴於具體機器系統的C語言編譯文字《可移植的C語言編譯程式》。
C語言繼續發展,在1982年,很多有識之士和美國國家標準協會(ANSI)為了使C語言健康地發展下去,決定成立C標準委員會,建立C語言的標準。委員會由硬體廠商、編譯器及其他軟體工具生產商、軟體設計師、顧問、學術界人士、C語言作者和應用程式設計師組成。1989年,ANSI釋出了第一個完整的C語言標準——ANSI X3.159-1989,簡稱“C89”,不過人們也習慣稱其為“ANSI C”。C89在1990年被國際標準化組織(International Standard Organization,ISO)一字不改地採納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899:1990也通常被簡稱為“C90”。1999年,在做了一些必要的修正和完善後,ISO釋出了新的C語言標準,命名為ISO/IEC 9899:1999,簡稱“C99”。 [6] 在2011年12月8日,ISO又正式釋出了新的標準,稱為ISO/IEC9899:2011,簡稱為“C11”。
語言特點
回覆列表
C語言是一種通用的程式語言,廣泛用於系統軟體與應用軟體的開發。於1969年至1973年間,為了移植與開發UNIX作業系統,由丹尼斯·裡奇與肯·湯普遜,以B語言為基礎,在貝爾實驗室設計、開發出來。
C語言具有高效、靈活、功能豐富、表達力強和較高的可移植性等特點,在程式設計中備受青睞,成為最近25年使用最為廣泛的程式語言[2]。目前,C語言編譯器普遍存在於各種不同的作業系統中,例如Microsoft Windows、macOS、Linux、Unix等。C語言的設計影響了眾多後來的程式語言,例如C++、Objective-C、Java、C#等。
二十世紀八十年代,為了避免各開發廠商用的C語言的語法產生差異,由美國國家標準局為C語言訂定了一套完整的國際標準語法,稱為ANSI C,作為C語言的標準。二十世紀八十年代至今的有關程式開發工具,一般都支援符合ANSI C的語法。C語言的特色之一是:程式設計師必須親自處理記憶體的分配細節。
大多數C語言實現使用棧(Stack)來儲存函式返回地址/棧幀基址、完成函式的引數傳遞和函式區域性變數的儲存。然而,在部分極特殊的平臺上,使用棧並不能獲得最大效率。此時的實現由編譯器決定。 如果程式需要在執行的過程中動態分配記憶體,可以利用堆(Heap)來實現。
基本上C程式的元素儲存在記憶體的時候有3種分配策略:
靜態分配如果一個變數宣告為全域性變數或者是函式的靜態變數,這個變數的儲存將使用靜態分配方式。靜態分配的記憶體一般會被編譯器放在資料段或程式碼段來儲存,具體取決於實現。這樣做的前提是,在編譯時就必須確定變數的大小。 以IA32的x86平臺及gcc編譯器為例,全域性及靜態變數放在資料段的低端;全域性及靜態常量放在程式碼段的高階。
自動分配函式的自動區域性變數應該隨著函式的返回會自動釋放(失效),這個要求在一般的體系中都是利用棧(Stack)來滿足的。相比於靜態分配,這時候,就不必絕對要求這個變數在編譯時就必須確定變數的大小,執行時才決定也不遲,但是C89仍然要求在編譯時就要確定,而C99放鬆了這個限制。但無論是C89還是C99,都不允許一個已經分配的自動變數執行時改變大小。
所以說C函式永遠不應該返回一個區域性變數的地址。
要指出的是,自動分配也屬於動態分配,甚至可以用alloca函式來像分配堆(Heap)一樣進行分配,而且釋放是自動的。
動態分配還有一種更加特殊的情況,變數的大小在執行時有可能改變,或者雖然單個變數大小不變,變數的數目卻有很大彈性,不能靜態分配或者自動分配,這時候可以使用堆(Heap)來滿足要求。ANSI C定義的堆操作函式是malloc、calloc、realloc和free。
使用堆(Heap)記憶體將帶來額外的開銷和風險。