免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C語言知識總結(jié),你還有哪塊知識不懂嗎(下)

一、預(yù)處理指令

  • 所有預(yù)處理指令都是以#開頭

  • 不帶參數(shù)的宏定義

//宏名 值;#define//宏的變量名全部是大寫,結(jié)尾不需要寫分號#define COUNT 6//還可以取消宏的定義#undef COUNT
  • 編譯器的作用是將原代碼文件中的代碼翻譯成機(jī)器可執(zhí)行的代碼,也就是0和1,而預(yù)處理指令會(huì)在編譯器翻譯代碼之前執(zhí)行

  • 帶參數(shù)的宏定義

/*一定要加括號,否則會(huì)出現(xiàn)意想不到的結(jié)果比如像下面這樣調(diào)用 sum(10,10) * sum(10,10);相當(dāng)于下面: 10+10*10+10 這樣替換過后改變了運(yùn)算順序,也就改變了預(yù)期的運(yùn)算結(jié)果 所以一定要把所有變量都加上括號 再比如平方的例子一定要像下面這樣寫,每個(gè)形參都要加上括號 #define Square(a)((a)*(a))*/#define sum(v1,v2)((v1)+(v2))int main(void){ int result = sum(11,10); printf('result=%d\n',result); //輸出了21 return 0;}
  • 宏定義只是單純的把左邊的定義(比如:sum(v1,v2))替換成右邊的(比如:(v1)+(v2)),不做任何運(yùn)算

  • 在常見的比較簡單的函數(shù)可以使用宏定義,這樣比函數(shù)效率要高

  • 條件編譯

#define A 10int main(){//條件編譯判斷如果用到常量值,比如下面的A//則必須得是通過宏定義的,因?yàn)樵诰幾g前已經(jīng)進(jìn)行了判斷//條件的括號可以省略 #if (A == 10) printf('a = 10\n'); #elif (A == 5) printf('a = 5\n'); #else printf('a is other number\n'); #endif //一定要有#endif結(jié)尾 return 0;}
  • 防止文件多次被包含

當(dāng)進(jìn)行多文件開發(fā)時(shí),某些函數(shù)功能,需要在.h文件中進(jìn)行聲明,還要將.h文件包含到某個(gè)文件中,當(dāng)代碼量過大時(shí),有可能發(fā)生多次包含,這雖然不會(huì)產(chǎn)生錯(cuò)誤,但是會(huì)影響性能,所以在頭文件中可以利用條件編譯,防止多次包含頭文件,例如像下面這樣定義頭文件:

/*解釋下面的寫法的邏輯:如果沒有定義宏 ABC 那么就定義一個(gè)宏ABC并且聲明sum()函數(shù)如果第二次被包含時(shí),同樣會(huì)進(jìn)行判斷此時(shí)判斷的條件不成立,因?yàn)榈谝淮伪话瑫r(shí)已經(jīng)創(chuàng)建了宏變量ABC所以這樣一來,避免了重復(fù)包含同一個(gè)頭文件ABC宏名稱不能和別的頭文件中的沖突!所以一般使用當(dāng)前.h頭文件名稱命名*/// #ifndef等同于#if !define,對應(yīng)的有#ifdef 等同于 #if define#ifndef ABC// ABC一般寫成當(dāng)前頭文件的名稱,后面的值隨便寫 #define ABC 11 int sum(int,int);#endif
  • typedef

  • 定義類型的別名(一般是全局變量,方便被使用),使用typedef以后,會(huì)提高開發(fā)效率

  • 應(yīng)用于5個(gè)場合

  1. 基本數(shù)據(jù)類型
  2. 指針
  3. 枚舉
  4. 結(jié)構(gòu)體
  5. 指向函數(shù)的指針
  • 應(yīng)用于基本數(shù)據(jù)類型

//需要分號typedef int MyInt;int main(){ //聲明別名后,可以這樣定義int類型變量 MyInt i = 10;}
  • 應(yīng)用于指針

//給指針類型起了一個(gè)別名Stringtype char* String;int main(){ String = “l(fā)uoguankun”;}
  • 應(yīng)用于結(jié)構(gòu)體

//定義了一個(gè)結(jié)構(gòu)體類型Studentstruct Student { int age;};//給結(jié)構(gòu)體Student起了個(gè)別名叫做Mystutypedef struct Student MyStu;//或者像下面這樣,在定義結(jié)構(gòu)體類型的時(shí)候直接起別名,這樣更加精簡typedef struct Student { int age;}MyStu;//如果像上面這樣給結(jié)構(gòu)體起了別名,定義結(jié)構(gòu)體變量就變成了下面這樣:MyStu s1;MyStu s2;MyStu s3;//還有一種是沒有類型名的結(jié)構(gòu)體//下面的結(jié)構(gòu)體不能使用原本的方式創(chuàng)建結(jié)構(gòu)體變量//只能通過下面的方式創(chuàng)建結(jié)構(gòu)體變量,無法用struct Student stu = {10};這種方式創(chuàng)建結(jié)構(gòu)體變量,//而前面幾種兩種創(chuàng)建結(jié)構(gòu)體變量的方式都可以//而這個(gè)只能像下面這樣創(chuàng)建://MyStu stu;typedef struct { int age;}MyStu;
  • 應(yīng)用于枚舉類型

//以下是沒有使用typedef定義別名時(shí)的枚舉使用enum Sex {Man, Woman};enum Sex s = Man;//以下是使用typedef定義別名后的使用方法typedef enum Sex MySex;MySex s = man;//還可以在定義枚舉類型的同時(shí)定義別名(推薦這樣定義)typedef enum Sex {Man, Woman} MySex;MySex s1 = man;
  • 應(yīng)用與指向函數(shù)的指針

//定義一個(gè)函數(shù)int sum(int a, int b){ return a+b;}//指向上面函數(shù)的指針聲明和調(diào)用int (*p)(int, int) = sum;int result = p(10,20);//使用typedef為指向函數(shù)的指針定義別名typedef int (*MyPoint)(int, int);MyPoint p = sum;int result = p(20,20);
  • 簡化指向結(jié)構(gòu)體的指針

//簡化前struct Person{ int age;}; struct Person p = {20}; struct Person *p2 = &p;printf('age = %d\n”, p2->age);//簡化后typedef struct Person{ int age;} *PersonPoint;struct Person p = {20}; PersonPoint p2 = &p;printf('age = %d\n', p2->age);

二、static和extern對函數(shù)的作用

  • 這兩個(gè)關(guān)鍵字分別代表內(nèi)部和外部函數(shù)

  • static —— 內(nèi)部函數(shù),只能被本文件訪問,其他文件不能訪問,但可以通過外部函數(shù)間接訪問
  • extern —— 外部函數(shù)(默認(rèn))
  • 在多文件開發(fā)的情況下,不同文件中的外部函數(shù)不可以重名,內(nèi)部函數(shù)可以同名,但在同一個(gè)文件中內(nèi)外部函數(shù)都不能重名
  • 定義完整的外部函數(shù)需要在函數(shù)前加上extern關(guān)鍵字,也可以省略,因?yàn)樗悄J(rèn)的
  • 定義內(nèi)部函數(shù)需要在函數(shù)前面加上static關(guān)鍵字
  • 雖然被static關(guān)鍵字修飾的函數(shù)不能被外部文件直接調(diào)用,但可以間接調(diào)用,在外部函數(shù)中調(diào)用內(nèi)部函數(shù)(條件是要被間接調(diào)用的內(nèi)部函數(shù)和外部函數(shù)在同一個(gè)文件),并且必須在外部函數(shù)的上面被聲明
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
你必須知道的495個(gè)C語言問題 讀書筆記
C/C++基礎(chǔ)知識:typedef用法小結(jié)
C和指針學(xué)習(xí)
干貨|手把手教你寫單片機(jī)的結(jié)構(gòu)體
關(guān)于typedef的用法總結(jié) - Bigcoder - 博客園
C編程核心要點(diǎn),你確信你會(huì)C語言?看完之后,男人沉默,女人流淚
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服