一.前言
一切,都想從不一樣做起。大學,原以為會和我當時高中想象的那樣,可以談場轟轟烈烈的戀愛,可以自由自在的旅行,可以忘乎所以,盡己之所興。如今,大三結束。驀然回首,卻發現自己浪費了那麼多改變自己的機會。如今,大學只剩最後一年,我要用這最後的時間去彌補曾經所浪費的一切,從現在開始,朝著自己的目標勇敢向前。
大學期間,最愛逛學校圖書館,經常走到人工智慧的專業書前,說起來,自己報自動化這個專業也是由於當時很渴望能夠在未來同智慧型機械人打交道。那既然如此,就好好朝著自己的夢走下去吧,上網查了資料,說到嵌入式是控制人工智慧的必要方式,但第一步肯定要學好c語言,想當初大一時
c的教學就那麼匆匆掠過,心中後悔自己沒有自學。不過也不遲,我是個從來不喜歡服輸怕遲的人,很喜歡一句話,活到老,學到老。更是相信,一切皆有可能。那從今天開始,我要重新認真學好
c語言。而在這,我使用
linux
來編輯學習
c二.c語言基本內容
c的歷史,說真的,很佩服先人們怎麼能如此聰慧。是有怎樣的大能才能使得那繁瑣枯燥的0,
1兩個數字演化成如今接近我們語言的
c。談到
c,都知道c程式
那麼什麼是程式呢?它又有些什麼作用?
程式籠統的來說,就是為了實現乙個特定的目的而設計的一系列有序且可操作的指令步驟。它一開始儲存在磁碟上,當需要用到時,將會被讀取到記憶體中,通過暫存器從記憶體中轉接給cpu處理之後,又返回給記憶體。通過這樣的步驟以實現我們所需要它完成的動作。
三.c語言的基本形式
但是,對於計算機而言,他只能識別0,
1這兩個數字,因此,當我們編寫完程式之後,要通過電腦程式的轉換,也就是常說的編譯、鏈結將它轉換成計算機所認識的機器語言。
c也有它特定的資料型別和表達形式。看到別人寫
c基本都是從這個形式開始。
#include
int main ()
#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生成的可執行檔名。這樣就可以有所區分,當然最好的是取生成的可執行檔名的時候不要給它加字尾。
最後,說說如何執行這個可執行檔案。在可生成的可執行檔案前加「./
」就可以,整體的形式是「
./可執行檔案」。這裡需要注意一點,」./
」並不是乙個命令,他只是乙個路徑而已,如果你知道可執行檔案的全部路徑,你也可以「路徑/
可執行檔案」也是可以執行檔案的。好了,這次就學到這,我要去練習一下今天所學習的內容了,缺少實戰可是不能學的完整的呢。
C語言第一課
一 c基礎 進製的轉換 進製,進製機制 常見的有二進位制 八進位制 十進位制 十六進製制 例 二進位制 0101010 八進位制 0235 十進位制 9 十六進製制 0x8a 注 十六進製制後面的10 16由a,b,c,d,e,f代替 進製的區分 八進位制前面會加 0 十六進製制後面會加 0x 進製...
C語言第一課
開始的第乙個程式是乙個最簡單的程式,也就是最經典的hello world程式,它的功能為列印出hello world。程式的內容非常簡單,也是c語言編寫程式的基本結構框架。機構的電腦是基於虛擬機器的,其程式設計是gcc的。1.建立hello.c檔案 vim hello.c2.編寫hello worl...
c語言第一課
c語言第一課 型別 不僅定義了資料元素的內容,還定義了這類資料上可以進行的運算。編譯 執行程式 程式原始檔命名約定 cc cxx cpp cp及.c 從命令列執行編譯器 cc test1.cc 其中cc是編譯器程式的名字。編譯器生成乙個可執行檔案。windows系統將會生成可執行檔案 prog1.e...