本文目錄一覽:
- 1、簡述開發一個c語言程序的步驟
- 2、C語言是在什麼語言的基礎上發展起來的?
- 3、C語言能開發什麼?
- 4、c語言的發展史
- 5、開發一個c語言程序要經過哪四個步驟
- 6、c語言的開發環境和開發工具都是什麼?
簡述開發一個c語言程序的步驟
1 寫代碼。這是最基礎的一步,即實現C語言的源文件(.c,必需),和可能的頭文件(.h,非必需)。
2 編譯。將編寫好的代碼,通過編譯工具,轉換為目標文件。此步中,會對文件內部及包含的頭文件進行語法語義的分析檢查。如果出錯,則必須返回到1步對代碼進行修改,直到沒有錯誤為止。
3 鏈接。將目標文件鏈接成可執行文件。此步會對文件直接的關聯進行檢查。如果出錯需要返回到1修改代碼。直到沒有錯誤。
4 運行。這個是最後一步,也是C語言的最終目的。
在運行結果與期望不符時,需要檢查原因,修改代碼,重新執行1,2,3直到程序沒有問題。
C語言是在什麼語言的基礎上發展起來的?
C語言的前身是1967年由Martin Richards為開發操作系統和編譯器而提出的兩種高級程序設計語言BCPL和B.BCPL。Ken Thompson在BCPL的基礎上,提出了新的功能更強的B語言,並在1970年用B語言開發出UINX操作系統的早期版本。BCPL語言和B語言都屬於「無數據類型」的程序設計語言,即所有的數據都是以「字」(Word)為單位出現在內存中,由程序員來區分數據的類型。
1972年,貝爾實驗室的Dennis Ritchie在BCPL語言和B語言的基礎上,又增加了數據類型及其他一些功能,提出了C語言,並在DEC PDP-11計算機上實現。以編寫UINX操作系統而聞名的C語言,目前已經成為幾乎所有操作系統的開發語言。應當指出的是,C語言的實現是與計算機無關的,只要精心設計,就可以編寫出可移植的(Portable)C語言程序。
到20世紀70年代末,C語言已經基本定型,這個C語言版本現在被稱為「傳統C語言」。1978年,Kernighan和Ritchie編著的《C程序設計語言》出版後,人們開始關注起程序設計語言家族的這個新成員,並最終奠定了C語言在程序設計中的地位。《C程序設計語言》也成為歷史上計算機科學領域最成功的專業書籍之一。
當年C語言還是一種與硬體相關的語言,為了讓它能夠運行於各種類型的計算機上,即各種硬體平台(Hardware platforms)上,人們就提出了多種相似但卻常常不能相互兼容的C語言版本。這就出現了一個很嚴重的問題:能夠在一台機器上運行的C語言程序往往不能夠在另外一台機器上運行,除非程序被重新編寫。因此,退出C語言標準的呼聲日益強烈。1983年,美國國家標準委員會(American National Standards Committee,ANSC)下屬的計算機與信息處理部(X3)成立了「X3J11技術委員會」,專門負責制定「一個無二義性的硬體無關的C語言標準」。1989年,「標準C」誕生。1999年,這個標準被更新為「INCITS/ISO/IEC9899-1999」(即C99)。
C語言能開發什麼?
1.多平台通用軟體
所謂多平台通用軟體,就是指這個軟體可以在很多系統上使用。例如,如果想讓你寫的同一個程序很好地運行在DOS、Windows 98、Windows XP、Windows CE、Linux、UNIX等多個操作系統上,C語言確實是個不錯的選擇。知道Apache嗎?它是一個開源Web伺服器工程,其中的HTTP伺服器可以運行於很多平台,Windows、Linux和UNIX都是可以的,這個伺服器就是用C語言開發的。
2.操作系統
由於C語言可以很自然地與彙編語言結合,又比彙編語言好用,能夠很靈活地控制計算機硬體,因此很適合開發操作系統。Windows很老的版本都是用C語言寫的,之後改用C++了,不過C++是兼容C語言的。Linux和UNIX系列的操作系統內核幾乎都是用C語言寫的,而且很多運行在板子上的嵌入式操作系統基本都是用C語言結合彙編寫的。如果你真想做個操作系統,C語言絕對可以勝任。
3.複雜運算軟體
之所以說C語言適合進行複雜計算軟體的開發,是因為:(1)複雜計算軟體本身很單純,只需要計算機進行計算就可以了;(2)C語言本身有豐富的運算功能,完全可以實現複雜計算功能;(3)因為C語言是一種接近底層語言的高級語言,所以它寫出來的程序在計算機上的運行效率很高。所以,要想做一個需要複雜而高效計算功能的軟體,選擇C語言絕對不會令你失望的。如果你經常做科學計算,用過MATLAB軟體,它其中一部分也是用C語言寫的。
c語言的發展史
C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。
C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)於1970年 由 肯·湯普遜(Ken Thompson)所研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。
後來於1980年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標準局(American National Standard Institution)為C語言訂定了一套完整的國際標準語法,稱為ANSI C,作為C語言的標準。1980年代至今的有關程序開發工具,一般都支持符合ANSI C的語法。
C語言是一個程序語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言也很適合搭配彙編語言來使用。儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標準規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
早期發展
C語言最早是由丹尼斯·里奇為了在PDP-11電腦上運行的UNIX系統所設計出來的編程語言,第一次發展在1969年到1973年之間。之所以被稱為「C」是因為C語言的很多特性是由一種更早的被稱為B語言的編程語言中發展而來。早期操作系統的核心大多由彙編語言組成,隨著C語言的發展,C語言已經可以用來編寫操作系統的核心。1973年,Unix操作系統的核心正式用C語言改寫,這是C語言第一次應用在操作系統的核心編寫上。
KR C
1978年,丹尼斯·里奇(Dennis Ritchie)和布萊恩·柯林漢(Brian Kernighan)合作出版了《C程序設計語言》的第一版。書中介紹的C語言標準也被C語言程序員稱作「KR C」,第二版的書中也包含了一些ANSI C的標準。KR C主要介紹了以下特色:
結構(struct)類型
長整數(long int)類型
無符號整數(unsigned int)類型
把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道用戶要處理i = -10還是i =- 10,使得處理上產生混淆。
即使在後來ANSI C標準被提出的許多年後,KR C仍然是許多編譯器的最低標準要求,許多老舊的編譯仍然運行KR C的標準。
ANSI C 和 ISO C
1989年,C語言被 ANSI 標準化(ANSI X3.159-1989)。標準化的一個目的是擴展KR C。這個標準包括了一些新特性。在KR出版後,一些新特性被非官方地加到C語言中。
void 函數
函數返回 struct 或 union 類型
void * 數據類型
在ANSI標準化自己的過程中,一些新的特性被加了進去。ANSI也規定了一套標準函數庫。ANSI ISO(國際標準化組織)成立 ISO/IEC JTC1/SC22/WG14 工作組,來規定國際標準的C語言。通過對ANSI標準的少量修改,最終通過了 ISO 9899:1990。隨後,ISO標準被 ANSI 採納。
傳統C語言到ANSI/ISO標準C語言的改進包括:
增加了真正的標準庫
新的預處理命令與特性
函數原型允許在函數申明中指定參數類型
一些新的關鍵字,包括 const、volatile 與 signed
寬字元、寬字元串與位元組多字元
對約定規則、聲明和類型檢查的許多小改動與澄清
WG14工作小組之後又於1995年,對1985年頒布的標準做了兩處技術修訂(缺陷修復)和一個補充(擴展)。下面是 1995 年做出的所有修改:
3 個新的標準庫頭文件 iso646.h、wctype.h 和 wchar.h
幾個新的記號與預定義宏,用於對國際化提供更好的支持
printf/sprintf 函數一系列新的格式代碼
大量的函數和一些類型與常量,用於多位元組字元和寬位元組字元
C99在ANSI的標準確立後,C語言的規範在一段時間內沒有大的變動,然而C++在自己的標準化創建過程中繼續發展壯大。《標準修正案一》在1995年為C語言創建了一個新標準,但是只修正了一些C89標準中的細節和增加更多更廣的國際字符集支持。不過,這個標準引出了1999年ISO 9899:1999的發表。它通常被稱為C99。C99被ANSI於2000年3月採用。
在C99中包括的特性有:
增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。
增強了預處理功能。例如:
宏支持取可變參數 #define Macro(…) __VA_ARGS__
使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。
支持 // 開頭的單行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 等類型
支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。
變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i100;++i) 的形式,即i 只在 for 語句塊內部有效。
允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。
初始化結構的時候允許對特定的元素賦值,形式為:
struct {int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
格式化字元串中,利用 \u 支持 unicode 的字元。
支持 16 進位的浮點數的描述。
printf scanf 的格式化串增加了對 long long int 類型的支持。
浮點數的內部數據描述支持了新標準,可以使用 #pragma 編譯器指令指定。
除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。
允許編譯器化簡非常數的表達式。
修改了 / % 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明確為 -22 / 7 = -3, -22 % 7 = -1,只有一種結果。
取消了函數返回類型默認為 int 的規定。
允許 struct 定義的最後一個數組不指定其長度,寫做 [] 。
const const int i 將被當作 const int i 處理。
增加和修改了一些標準頭文件,比如定義 bool 的 stdbool.h ,定義一些標準長度的 int 的 inttypes.h ,定義複數的 complex.h ,定義寬字元的 wctype.h ,類似於泛型的數學函數 tgmath.h, 浮點數相關的 fenv.h。 在stdarg.h 增加了 va_copy 用於複製 … 的參數。time.h 里增加了 struct tmx ,對 struct tm 做了擴展。
輸入輸出對寬字元以及長整數等做了相應的支持。
開發一個c語言程序要經過哪四個步驟
開發一個C語言程序需要經過的四個步驟:編輯、編譯、連接、運行。
C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進位文件之後即可運行。
1、預處理:輸入源程序並保存(.C文件)。
2、編譯:將源程序翻譯為目標文件(.OBJ文件)。
3、鏈接:將目標文件生成可執行文件( .EXE文件)。
4、運行:執行.EXE文件,得到運行結果。
擴展資料:
C語言代碼變為程序的幾個階段:
1、首先是源代碼文件test.c和相關的頭文件,如stdio.h等被預處理器cpp預處理成一個.i文件。經過預編譯後的.i文件不包含任何宏定義,因為所有的宏已經被展開,並且包含的文件也已經被插入到.i文件中。
2、編譯過程就是把預處理完的文件進行一系列的詞法分析、語法分析、語義分析以及優化後產生相應的彙編代碼文件,這個過程往往是我們所說的整個程序的構建的核心部分,也是最複雜的部分之一。
3、彙編器不直接輸出可執行文件而是輸出一個目標文件,彙編器可以調用ld產生一個能夠運行的可執行程序。即需要將一大堆文件鏈接起來才可以得到「a.out」,即最終的可執行文件。
4、在鏈接過程中,對其他定義在目標文件中的函數調用的指令需要被重新調整,對實用其他定義在其他目標文件的變數來說,也存在同樣問題。
參考資料來源:百度百科-c語言
c語言的開發環境和開發工具都是什麼?
在過去的二十年里,C和C++已經成為在商業軟體的開發領域中使用最廣泛的語言。它們為程序員提供了十分靈活的操作,不過同時也犧牲了一定的效率。與諸如 Microsoft Visual Basic等語言相比,同等級別的C/C++應用程序往往需要更長時間來開發。由於C/C++語言的複雜性,許多程序員都試圖尋找一種新的語言,希望能在功能與效率之間找到一個更為理想的權衡點。
目前有些語言,以犧牲靈活性的代價來提高效率。可是這些靈活性正是C/C++程序員所需要的。這些解決方案對編程人員的限制過多(如屏蔽一些底層代碼控制的機制),其所提供的功能難以令人滿意。這些語言無法方便地同早先的系統交互,也無法很好地和當前的網路編程相結合。
對於C/C++用戶來說,最理想的解決方案無疑是在快速開發的同時又可以調用底層平台的所有功能。他們想要一種和最新的網路標準保持同步並且能和已有的應用程序良好整合的環境。另外,一些C/C++開發人員還需要在必要的時候進行一些底層的編程。
微軟推出C#
C# (C sharp)是微軟對這一問題的解決方案。C#是一種最新的、面向對象的編程語言。它使得程序員可以快速地編寫各種基於Microsoft .NET平台的應用程序,Microsoft .NET提供了一系列的工具和服務來最大程度地開發利用計算與通訊領域。
正是由於C#面向對象的卓越設計,使它成為構建各類組件的理想之選——無論是高級的商業對象還是系統級的應用程序。使用簡單的C#語言結構,這些組件可以方便的轉化為XML網路服務,從而使它們可以由任何語言在任何操作系統上通過Internet進行調用。
最重要的是,C#使得C++程序員可以高效的開發程序,而絕不損失C/C++原有的強大的功能。因為這種繼承關係,C#與C/C++具有極大的相似性,熟悉類似語言的開發者可以很快的轉向C#。
效率與安全性
新興的網路經濟迫使商務企業必須更加迅速的應對競爭的威脅。開發者必須不斷縮短開發周期,不斷推出應用程序的新版本,而不僅僅是開發一個「標誌性」的版本。
C#在設計時就考慮了這些問題。它使開發者用更少的代碼做更多的事,同時也不易出錯。
支持現有的網路編程新標準
新的應用程序開發模型意味著越來越多地解決方案依賴於新出現的網路標準,例如HTML,XML,SOAP等。現存的開發工具往往都是早於Internet出現的,或者是在我們所熟知的網路還處於孕育期時出現的。所以,它們一般無法很好地支持最新的網路技術。
C#程序員可以在Microsoft .NET平台上事半功倍的構建應用程序的擴展框架。C#包含了內置的特性,使任何組件可以輕鬆轉化為XML網路服務,通過Internet被任何操作系統上運行的任何程序調用。
更突出的是,XML網路服務框架可以使現有的XML網路服務對程序員來說就和C#對象一樣。這樣,程序員就可以方便地使用他們已有的面向對象的編程技巧來開發利用現有的XML網路服務。
還有一些精細的特性,使得C#成為一流的網路編程工具。例如,XML正逐漸成為在網路上傳輸結構化數據的標準。這種數據集合往往非常小。為提高性能,C#允許把XML數據直接映射到struct數據類型,而不是class。這樣對處理少量的數據非常有效。
消除大量程序錯誤
即使是專家級的C++程序員也常會犯一些最簡單的小錯誤——比如忘了初始化變數,但往往就是這些小錯誤帶來了難以預料的問題,有些甚至需要很長時間來尋找和解決。一旦一個程序作為產品來使用,就算最簡單的錯誤糾正起來也可能要付出極其昂貴的代價。
C#的現代化設計能夠消除很多常見的C++編程錯誤。例如:
l資源回收減輕了程序員內存管理的負擔。
l C#中變數由環境自動初始化。
l變數是類型安全的。
這樣,程序員編寫與維護那些解決複雜商業問題的程序就更方便了。
對版本的更新提供內在的支持降低了開發成本
更新軟體組件是一項很容易出錯的工作,因為代碼的修改可能無意間改變原有程序的語義。為協助開發者進行這項工作,C#為版本的更新提供內在的支持。例如,方法重載必須顯式聲明。這樣可以防止編碼錯誤,保證版本更新的靈活性。還有一個相關的特性就是對介面和介面繼承的內在支持。這些特性使得C#可以開發複雜的框架並且隨著時間不斷發展更新它。
總體來說,這些特性使得開發程序項目的後續版本的過程更加健壯,從而減少後續版本的開發成本。
功能、表達與靈活性
商業過程和軟體實現的更好對應
企業的商業計劃要付諸現實,必須在抽象的商業過程和實際的軟體實現之間建立緊密地對應。不過大多數語言都很難做到這點。例如,如今的程序員們一般使用代碼注釋來註明哪個類對應於某個抽象的商業對象。
C#語言允許類型定義的,擴展的元數據。這些元數據可以應用於任何對象。項目構建者可以定義領域特有的屬性並把他們應用於任何語言元素-類,介面等等。然後,開發人員可以編程檢查每個元素的屬性。這樣,很多工作都變得方便多了,比如編寫一個小工具來自動檢查每個類或介面是否被正確定義為某個抽象商業對象的一部分,或者只是創建一份基於對象的領域特有屬性的報表。定製的元數據和程序代碼之間的緊密對應有助於加強程序的預期行為和實際實現的之間的對應關係。
擴展交互性
作為一種自動管理的,類型安全的環境,C#適合於大多數企業應用程序。但實際的經驗表明有些應用程序仍然需要一些底層的代碼,要麼是因為基於性能的考慮,要麼是因為要與現有的應用程序介面兼容。這些情況可能會迫使開發者使用C++,即使他們本身寧願使用更高效的開發環境。
C#採用以下對策來解決這一問題:
l內置對組建對象模型(COM)和基於Windows?的API的支持;
l允許有限制地使用純指針(Native Pointer)。
在C#中,每個對象都自動生成為一個COM對象。開發者不再需要顯式的實現IUnknown和其他COM介面.這些功能都是內置的.類似的,C#可以調用現有的COM對象,無論它是由什麼語言編寫的.
C#包含了一個特殊的功能,使程序可以調用任何純API。在一段特別標記的代碼中,開發者可以使用指針和傳統C/C++特性,如手工的內存管理和指針運算。這是其相對於其它環境的極大優勢。這意味著C#程序員可以在原有的C/C++代碼的基礎上編寫程序,而不是徹底放棄那些代碼。
無論是支持COM還是純API的調用,都是為了使開發者在C#環境中直接擁有必要的強大功能。
結論
C#是一種現代的面向對象語言。它使程序員快速便捷地創建基於Microsoft .NET平台的解決方案。這種框架使C#組件可以方便地轉化為XML網路服務,從而使任何平台的應用程序都可以通過Internet調用它。
C#增強了開發者的效率,同時也致力於消除編程中可能導致嚴重結果的錯誤。C#使C/C++程序員可以快速進行網路開發,同時也保持了開發者所需要的強大性和靈活性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198337.html