交待了C語言的歷史、特性、優缺點、何其他基礎內容。
C起源於貝爾實驗室,於1972年開發,當時Dennis Ritchie和Ken Thompson一起設計UNIX系統。
指針:通過指針能夠直接對內存單元裡的數據進行操作,還可以用指針根據需要,隨時向系統動態的申請內存資源。
指針機制的時間開銷和空間開銷都是最小的,運用指針機制,使得C/C++語言表達能力很強,能夠描述各種復雜的數據結構;可以操作變量、函數、對象等
引用:引用 是 某個變量或對象 的 別名。(關鍵字typedef) 引用的實質就是引用地址,因而和指針是一樣高效的。但引用克服了指針帶來的不便。
內聯函數:通常函數的調用需要一定的時間開銷,這意味著調用時,時間用於建立調用、傳遞參數、跳轉到函數代碼並返回。嗯,就相當於#define的加強版。
這意味著,在一個系統上編寫的C程序,經過很少的改動或不經過修改就可以在其他系統上運行。如果修改是必要的,則通常只需要改變伴隨主程序的一個頭文件中的幾項內容即可。
C語言允許訪問硬件,並可以操縱內存中的特定位。
C的語法不像其他語言那樣嚴格,但使用C的時候,可能會犯一些其他語言中不會出現的錯誤。C有更多的自由,但使用的時候有更大的風險。
它沒有邊界檢查,很容易發生內存沖突,有懸空指針和內存/資源洩漏,螺栓支持並發性,沒有模塊,沒有命名空間。錯誤處理可能相當繁瑣和冗長。當調用堆棧崩潰,或者攻擊性輸入操縱你的進程,很容易就產生一堆錯誤。
C的簡潔性和其豐富的運算符相結合,使其可能會編寫出極其難以理解的代碼。C表達自由方面也有風險,你可能會犯非常難以追蹤的編程錯誤。自由的代價永遠是警惕。
c還有安全性,可靠性,但我不想再繼續這個話題了。
關於C語言和計算機的工作原理,也有緊密的聯系。這也說明,學好C還需學好微機原理。
cpu的工作非常簡單:從內存中獲取一個指令並執行,然後從內存中獲取下一個指令並執行。。。。。。
cpu的工作區在寄存器(registers)之中,每個寄存器只能保存一個數。
cpu只能理解有限的指令(指令集,更多內容,學匯編去吧。這就是為什麼做逆向的需要一定的匯編知識),這些指令相當的具體,比如,把某個數從內存單元移到寄存器
1、定義目標:這一階段,應該用一般概念來考慮問題,而不是用一些具體語言。
2、設計程序:決定程序如何完成目標,用戶界面如何,程序如何組織,目標用戶是誰,時間規劃。還有算法和數據結構的設計。
3、編寫代碼:選擇編程語言(這裡的話當然選C),選擇開發環境(IDE?或者是編譯器+文本編輯器?),代碼風格,注釋(不要瞧不起注釋!!!)等等。
4、編譯代碼:這是編譯器(Compiler)的工作,將源代碼轉化為可執行代碼。 還有一個東西叫鏈接器(linker),他主要是將庫例程引入,形成一個可以運行的可執行文件。
5、運行程序:IDE中直接點“運行” or “Run”。GCC編譯器呢,在命令行中,轉到該目錄下,鍵入可執行文件名即可。例如Linux中的 “gcc hello.c -o hello.out” 然後“./hello.out”
6、測試調試:當程序運行之後的效果或結果不是所預想的時候,就要檢查代碼了,關於Debug,這也是一門技術。不在此繼續話題
7、維護修改:程序做出來後,可能會有其他改進或者有Bug需要解決,或者添加一些其他的功能等等
編程工作不可能是這麼一~條~龍下來的。根據需要在不同步驟之間來回反復。或者改變了想法,重新開始工作等等。所以,在編寫代碼前,先進行好規劃。