C語言簡介:
BCPL->newB->C->UNIX->Linux->gcc
C語言專門編寫操作系統的語言,所以天生適合對硬件編程,也以運行速度快著稱,也非常適合實現數據結構和算法。
由于出現時間過早,有很多缺陷,也沒想普通人會使用C語言編程,因此存在著些陷井,但前輩總結了一些避免的經驗《C語言陷井和缺陷》。
自由源于自律
C89語法標準,也是gcc默認的語法標準。
C99語法標準,對C語言的擴展和增強 std=gnu99。
C11語法標準,全新的升級。
第一個C程序:
#include <stdio.h>
程序員所編寫的代碼不是標準的C代碼,需要一段程序反它釋放成標準的C代碼,負責翻譯的程序叫預處理器,翻譯的過程叫預處理,被釋翻譯的代碼叫預處理指令,以#號開頭的都是預處理指令。
#include 的功能就把一個頭文件導入到當前文件。
#include “xxx.h” 先當前路徑下加載xxx.h文件,如果沒有再從系統指定的 路徑下加載xxx.h文件。
#include <> 從系統指定的路徑下加載xxx.h文件。
操作系統通過設置環境變量來指定加載頭文件的路徑。
stdio.h
頭文件:以.h結尾,里面存儲是一些輔助性的代碼,絕大多數是函數的聲明(也就是函數的開頭)。源文件:以.c結尾,里面記錄的是功能性的代碼。C語言標準委員會為C語言以函數形式提供了一些基礎功能,這些函數被封裝在libc.so庫文件中。有很多頭文件負責對libc.so進行說明,stdio.h就是其中一個,常用的還有stdlib.h、string.h。stdio.h負責對輸入輸出功能的函數進行說明,standard input output。
int main()
{printf("Hello World!\n"); return 0;
}
main函數:
C語言以函數以單位管理代碼,一個函數就一段具有某項功能的代碼段。main函數是程序的執行入口,有且只有有一個。int 是一種數據類型,它表示main的執行結果是一個整數。return 功能有兩個:1、結束函數的執行 2、返回一個數據給函數的調用者main函數由操作系統調用,它的返回值給了操作系統,反映了該程序是怎么結束的,通常有三種:正數 出現異常0 一切正常負數 出現錯誤echo $? 查看上一程序main函數的返回值。printf/scanf是標準庫中的函數,負責輸入、輸出數據,用來調試程序。
轉義字符:鍵盤上沒有一些符號,有一些特殊字符來表示,這些特殊字符叫轉義字符,\n就是其中一個。\n 換行\r 回到行首\t 制表符,對來自動對齊數據\a 鈴響%% 顯示一個%\\ 表示一個\\b 退一個字符
C語言以分號作為一行代碼的結束,使用大括號劃分代表區域。
編譯器:
負責把人能看懂的記錄代碼的文本文件,翻譯成計算機能看懂二進制文件,由預處理器、編譯器、鏈接器組成。
gcc是GNU社區為了編譯Linux代碼而開發一款免費的編譯器,默認采用C89語法,-std=gnu99可以設置C99語法。
常用的參數:-E 顯示預處理結果-c 只編譯不鏈接-o 設置編譯結果的名字-I 指定頭文件的加載路徑-S 生成匯編代碼-l 指定要使用庫,-lm 使用數學庫-Wall 以嚴格的標準來檢查代碼,顯示更多的警告提醒-Werror 把警告當錯誤處理-std 指定編譯語法標準
C代碼變成可執行程序的過程:
1、預處理 把源文件翻譯成預處理文件gcc -E code.c 顯示預處理結果gcc -E code.c -o code.i 生成以.i結尾的預處理文件
2、編譯 把預處理文件翻譯成匯編文件gcc -S code.i 生成以.s結尾的匯編文件
3、匯編 把匯編文件翻譯成二進制的目標文件gcc -c code.s 生成以.o結尾的目標文件
4、鏈接 把若干個目錄文件合并成一個可執行程序gcc a.o b.o ... 默認生成一個a.out的可執行程序
C文件類型:
.h 頭文件
.h.gch 頭文件的編譯結果,它會被優先使用
.c 源文件
.i 預處理文件
.s 匯編文件
.o 目標文件
.a 靜態庫
.so 共享庫
感謝關注~~會持續、定期更新