經(jīng)歷了一禮拜的ruby on rails的全棧開發(fā)了解,覺得自己基本上已經(jīng)放棄了目前基于Mac OS下開發(fā)的堅持,一來自己的筆電已經(jīng)用了4年,開個MAC虛擬機(jī)占用的內(nèi)存基本上已經(jīng)到頂,切回Window界面會卡一會,而且在蘋果系統(tǒng)內(nèi)操作也是那種延遲的感覺,所以我立馬買了一塊kinston的4G內(nèi)存條,打算改善一下愛機(jī)的身體~
所以呢,網(wǎng)站全棧開發(fā)先放一放罷。一是自己將來專業(yè)是通信,接觸到網(wǎng)站設(shè)計開發(fā)的機(jī)會可能在兩年內(nèi)為0,除非自己非常喜歡做網(wǎng)頁,有那種成就感;二是將來打算搞前端開發(fā),那時候可能就會比較吃香。。。
話說回來,通信行業(yè)用的編程最多的語言無非就是C,C++,C#,再加上熟悉一門操作系統(tǒng)LInux,把這幾門語言精通一兩個,不管是在研究生做項目還是將來工作都是挺管用的,至少不會被老板說這個不會那個不會~這次來把昨天學(xué)的c語言基礎(chǔ)知識回顧一遍,至少把它用文字表達(dá)出來,回顧一次可能會有新的收獲。

Linux作為開源操作系統(tǒng),深受廣大程序員的喜愛。不僅是因為它完全免費,而且支持多任務(wù),多用戶,界面友好,支持多種平臺。而在這里一個很大的特點就是可以當(dāng)做嵌入式操作系統(tǒng)來使用,而且現(xiàn)在到處都是嵌入式的設(shè)備了,銀行的pos機(jī),火車站的自動取票機(jī),都有嵌入式的身影。
首先你得裝一個虛擬機(jī),我是VMware12版本,操作系統(tǒng)我選擇ubuntu,現(xiàn)在版本可能已經(jīng)更新到了1604,而我能還在用1204,尷尬。。。
編輯器linux有自帶的vi,但是我用的是windows下的source insight,感覺比較人性化,可以跨平臺在linux的gcc下編譯。
c語言要寫的好,要讓別人看得懂,要好易維護(hù)。要注意以下幾點:
1.賦值,變量堆在一起;
2.相關(guān)功能的語句堆在一起;
3.調(diào)用函數(shù)在一起;
4.適當(dāng)加一些注釋;
5.對變量習(xí)慣性的賦初始值。
需要知道的是int main(void)這里的void不是空的意思,空我們一般都用null表示,這里是指不接受任意參數(shù)。對于幾種數(shù)據(jù)類型了解他占幾個bit,就是占幾位。注意數(shù)據(jù)類型的長度是隨著CPU類型和編譯器的不同而改變,像以前turbo c上int只占2位,而我們現(xiàn)在的環(huán)境下通過sizeof()函數(shù)顯示的是4位,long int=int =4位。而long double=12位~
對于常量和變量,常量不占用內(nèi)存空間,不可變。而變量分為全局變量和局部變量,全局變量在開始運行時初始化,在main函數(shù)完全結(jié)束后才會釋放,從開始到結(jié)束都會占用內(nèi)存;局部變量在定義代碼塊時初始化,函數(shù)一結(jié)束就被釋放~所以我們一般不用全局變量,因為占內(nèi)存,而且通用性比較差。
對于操作符,有賦值操作符;乘除操作符,取模操作符。有個好玩的題目,老板發(fā)錢:第一天給你1元,第二天2元,第三天4元,那么第30天可以賺多少呢?不用pow函數(shù)去算,用自己思考的算法去解決。這里當(dāng)然需要用到while循環(huán),以下是循環(huán)語句:
while(days <= 30){
total += start;
days += 1;
start = start *2
printf("days:%d,start:%d,total:%d\n",days,start,total);
}
在語句中盡量避免運算符++ 和 - -,因為不同的編譯器可能會出現(xiàn)不一樣的操作順序,因為他們的優(yōu)先順序僅僅比()低而已。
形參和實參:int sum(int a,int b),這括號里面的就是指形參,即函數(shù)聲明。函數(shù)調(diào)用傳遞一個值時變量有值了,這便是實參~
static 修飾全局變量時,表示該變量在本文件中使用;修飾局部變量時,將該局部變量與全局變量一起存儲,再次使用時保存了上次調(diào)用的值。
static的兩個法則:
若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態(tài)全局變量,以降低模塊間的耦合度
若全局變量僅由單個函數(shù)訪問,則可以將這個變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度。
還一個要注意的就是scanf("%s, str");這個時候定義的char str[32]="0",相當(dāng)于ASCII碼中的0所對應(yīng)的48;而char str[32]={0}就是賦初始值為0.而第一句的str是定義的一個字符串?dāng)?shù)組,而我們要記住的是:數(shù)組名就是數(shù)組的首地址,并且是第一個元素的地址。頭腦中可以想象一下擺列整齊的內(nèi)存,在最前面大頭針的就是首地址,今后學(xué)習(xí)指針時還需深入挖掘呢~
執(zhí)行多文件,多模塊編譯時,要gcc 主c文件還有各個函數(shù)c文件,注意.h頭文件也要寫好,因為主函數(shù)要調(diào)用。.h文件如下定義:
#ifndef _SUM_H
#define _SUM_H
int sum(int x,int y)
#endif
諸如此類編寫.h文件~
最后還是來介紹一下linux下的編譯操作,需要在windows下通過虛擬機(jī)共享文件到Ubuntu上,cd/mnt/hgfs/linux_code這幾步就進(jìn)入了自己在win下碼的代碼。使用gcc main.c就開始編譯,如果不報錯,打./a.out,就可以執(zhí)行結(jié)果(相當(dāng)于雙擊)。一般打完首字母后打tab鍵,會補(bǔ)齊剩下的單詞,前提是要存在這個文件或目錄。
遇到段錯誤怎么辦?一般這樣做:
gcc main.c -g
gdb a.out
r
bt
之后終端會顯示出具體的錯誤行數(shù),之后去認(rèn)真修改就好了~
