一.前言
一切,都想從不一樣做起。大學,原以為會和我當時高中想象的那樣,可以談場轟轟烈烈的戀愛,可以自由自在的旅行,可以忘乎所以,盡己之所興。如今,大三結束。驀然回首,卻發現自己浪費了那麼多改變自己的機會。如今,大學只剩最後一年,我要用這最後的時間去彌補曾經所浪費的一切,從現在開始,朝著自己的目標勇敢向前。
大學期間,最愛逛圖書館,經常走到人工智慧的專業書前,說起來,自己報自動化這個專業也是由於當時很渴望能夠在未來同智慧型機械人打交道。那既然如此,就好好朝著自己的夢走下去吧,上網查了資料,說到嵌入式是控制人工智慧的必要方式,但第一步肯定要學好c語言,想當初大一時c的教學就那麼匆匆掠過,心中後悔自己沒有自學。不過也不遲,我是個從來不喜歡服輸怕遲的人,很喜歡一句話,活到老,學到老。更是相信,一切皆有可能。那從今天開始,我要重新認真學好c語言。而在這,我使用linux來編輯學習c
二.c語言基本內容
c的歷史,說真的,很佩服前輩們怎麼能如此聰慧。是有怎樣的大能才能使得那繁瑣枯燥的0,1兩個數字演化成如今接近我們語言的c。談到c,都知道c程式
那麼什麼是程式呢?它又有些什麼作用?
程式籠統的來說,就是為了實現乙個特定的目的而設計的一系列有序且可操作的指令步驟。它一開始儲存在磁碟上,當需要用到時,將會被讀取到記憶體中,通過暫存器從記憶體中轉接給cpu處理之後,又返回給記憶體。通過這樣的步驟以實現我們所需要它完成的動作。
三.c語言的基本形式
但是,對於計算機而言,它只能識別0,1這兩個數字,因此,當我們編寫完程式之後,要通過電腦程式的轉換,也就是常說的編譯、鏈結將它轉換成計算機所認識的機器語言。
c也有它特定的資料型別和表達形式。看到別人寫c基本都是從這個形式開始。
#include
int main ()
return 0;
#include<>用於包含c語言的標頭檔案,它會將它後面所包含的檔案在預處理期間,把檔案原來的內容替換到當前的位置。而在標頭檔案裡,有一點值得注意include 後面的<>有時候還可以用」」但是,它們卻有著不同的用法。
1.使用<>包含標頭檔案時,程式會去系統預設的標頭檔案存放目錄下找<>包含起來的檔案(系統預設的存放目錄一般是/usr/include資料夾內)。
2.使用」」包含檔案時,首先會在我們所建立的程式所在的目錄下查詢標頭檔案,如果找不到,再去系統目錄下找。
int main ()這是函式的定義形式,main是乙個函式,這個東西執行結束,就要往外丟擲乙個值,int正是代表要丟擲的值的型別。main函式是c語言程式的入口函式,所有的c語言的程式都是從main開始執行的,在乙個程式裡,有且只有乙個main函式。
「」內的語句叫塊語句,函式所有的**都要在大括號之內。在內定義的變數叫做區域性變數,外部定義的變數叫全域性變數。
「printf」是乙個函式,它的功能是往標準輸出列印資料,有著一些固定的格式,我們用雙引號將字串括起來,而printf是可以直接列印字串的。而printf作為乙個函式,就一定要宣告,是的,它的宣告語句就在我們剛才所說的stdio.h的標頭檔案裡,所以當你要使用printf時,就必須要包含stdio.h標頭檔案。當然,如果你整個程式裡都不需要用到stdio.h標頭檔案裡的函式,你當然可以在開頭宣告時不用stdio.h這個標頭檔案。另外需要注意一點,c語言裡的語句都是以分號;結束。所以在寫完一句**需要轉到下一行之前,千萬別忘記了這一點,不然一定會報錯。正所謂失之毫釐,謬之千里。所以一定要細心。寫完一段**,要認真檢查,看看自己是否有什麼遺漏。
最後的return代表著乙個函式執行的結束,一旦掃瞄到它,在它後面的語句都不會再執行。它後面所跟的0就是一開始我們所說的程式結束所要丟擲的那個值。記住,這個值的型別一定要更函式定義時的型別一致哦。
四.c程式的執行
當我們寫好一段程式之後,並不是代表我們的工作已經結束了,我們還要對這個檔案(我們一般將這個檔案叫做執行檔案)進行四步走的計畫,也就是預編譯,編譯,彙編和鏈結這四個步驟,最終它才能形成計算機能夠執行的可執行檔案。
1.預編譯
顧名思義,預編譯就是在編譯之前的一些處理。預編譯的主要作用是在編譯之前處理由「#」開頭的命令#include做檔案替換,因為對於一些標頭檔案,並不是我們寫的,它是在檔案庫中被我們呼叫來使用的,在做預編譯時,它會將我們呼叫的這個標頭檔案的整個源**都替換到我們所編寫的程式中,也就是將標頭檔案的名字換成實打實的內容。同時它會在裡面去掉我們在一開始在程式裡所做的一些注釋等。
在linux裡,我們預編譯的命令是:gcc-e 原始檔 -o 生成的預編譯檔案(***.i)
2.編譯
編譯的作用是把我們通過預編譯生成時的預編譯檔案(***.i)檔案編譯成彙編檔案。因為c語言的進化史,是由機器語言發展到組合語言,然後到高階語言的,但是計算機只能識別機器語言,所以,我們還要反著回去,由高階語言編譯到組合語言最後到機器語言。這樣才能被計算機識別並執行。
編譯的命令是:gcc -s原始檔 -o 彙編檔案(***.s)
3.彙編
彙編的作用是將**編譯成二進位制,也就是翻譯成機器語言。
彙編的命令:gcc -c 彙編檔案(***.o)
4.鏈結
鏈結的作用是將當前的目標檔案和其他使用到的庫檔案整合到一起生成可執行的二進位制檔案,因為,系統所包含的標頭檔案並不一定擁有所有我們所需要的標頭檔案,這時候有些大牛會做好了這些檔案,你可以直接拿來使用,比如,你需要使用math.h這個標頭檔案,但是你在linux的/usr/include裡是找不到這個標頭檔案的,但是大神們已經幫我們寫好了,此時,我們要使用它,只需要在我們的命令最後加乙個「-lm」就可以。「m」就是math.h的縮寫。
肯定的,如果按照這四步走,我們一步一步的編寫這命令,肯定要煩死。所以,我們有命令將這四步直接走一遍。你可以直接:gcc 原始檔,此時生成的是可執行的a.out檔案,當然如果在乙個檔案裡你有許多原始檔要編譯,此時生成那麼多a.out肯定會搞不清,所以,我們還可以使用這個命令來讓它生成的可執行檔案改名:gcc 原始檔 -o 生成的可執行檔名。這樣就可以有所區分,當然最好的是取生成的可執行檔名的時候不要給它加字尾。
最後,說說如何執行這個可執行檔案。在可生成的可執行檔案前加「./」就可以,整體的形式是「./可執行檔案」。這裡需要注意一點,」./」並不是乙個命令,他只是乙個路徑而已,如果你知道可執行檔案的全部路徑,你也可以「路徑/可執行檔案」也是可以執行檔案的。好了,這次就寫到這,我要去練習一下今天所學習的內容了,畢竟缺少實戰可是不能學的完整的。
嵌入式LinuxC基礎 檔案程式設計
1.linux檔案分類 普通檔案 計算機使用者和作業系統用於存放資料 程式等資訊的檔案。目錄檔案 linux檔案系統將檔案索引節點號和檔名同時儲存在目錄中,所以目錄檔案就是將檔名稱和它的索引節點號結合在一起的一張表。裝置檔案 linux把所有的外設都當作檔案來看待,每一種i o裝置對應乙個裝置檔案並...
嵌入式Linux C(二)
tab 命令不全,常用 ctrl c 終止正在執行的程式 ctrl d 退出執行介面 ctrl alt t 在當前終端新建標籤頁 linux 常用命令 useradd usedel passwd su groupadd groupdel ls cd touch cp mv rm chmod mkdi...
嵌入式Linux c 基礎
資料型別 向計算機申請儲存資料的記憶體大小,如int 申請4位元組的大小。變數是用來儲存值的所在處,它們有名字和資料型別.變數的資料型別決定了如何將代表這些值的位儲存到計算機的記憶體中 試卷的筆記 電腦是x86 裸機是arm 編譯程式 gcc 和 arm linux gcc 字串表示 反斜槓要必須雙...