久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C語(yǔ)言知識(shí)總結(jié),,你還有哪塊知識(shí)不懂嗎(下)

 岐岐feng 2018-06-04

一,、預(yù)處理指令

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

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

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

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

/*一定要加括號(hào),,否則會(huì)出現(xiàn)意想不到的結(jié)果比如像下面這樣調(diào)用 sum(10,10) * sum(10,10);相當(dāng)于下面: 10+10*10+10 這樣替換過(guò)后改變了運(yùn)算順序,,也就改變了預(yù)期的運(yùn)算結(jié)果 所以一定要把所有變量都加上括號(hào) 再比如平方的例子一定要像下面這樣寫(xiě),每個(gè)形參都要加上括號(hào) #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)算

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

  • 條件編譯

#define A 10int main(){//條件編譯判斷如果用到常量值,比如下面的A//則必須得是通過(guò)宏定義的,,因?yàn)樵诰幾g前已經(jīng)進(jìn)行了判斷//條件的括號(hào)可以省略 #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)行多文件開(kāi)發(fā)時(shí),,某些函數(shù)功能,需要在.h文件中進(jìn)行聲明,,還要將.h文件包含到某個(gè)文件中,,當(dāng)代碼量過(guò)大時(shí),有可能發(fā)生多次包含,,這雖然不會(huì)產(chǎn)生錯(cuò)誤,,但是會(huì)影響性能,所以在頭文件中可以利用條件編譯,,防止多次包含頭文件,,例如像下面這樣定義頭文件:

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

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

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

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

//需要分號(hào)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í)候直接起別名,,這樣更加精簡(jiǎn)typedef struct Student { int age;}MyStu;//如果像上面這樣給結(jié)構(gòu)體起了別名,定義結(jié)構(gòu)體變量就變成了下面這樣:MyStu s1;MyStu s2;MyStu s3;//還有一種是沒(méi)有類型名的結(jié)構(gòu)體//下面的結(jié)構(gòu)體不能使用原本的方式創(chuàng)建結(jié)構(gòu)體變量//只能通過(guò)下面的方式創(chuàng)建結(jié)構(gòu)體變量,,無(wú)法用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)用于枚舉類型

//以下是沒(méi)有使用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ǎn)化指向結(jié)構(gòu)體的指針

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

C語(yǔ)言知識(shí)總結(jié),你還有哪塊知識(shí)不懂嗎(下)

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

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

  • static —— 內(nèi)部函數(shù),,只能被本文件訪問(wèn),其他文件不能訪問(wèn),,但可以通過(guò)外部函數(shù)間接訪問(wèn)
  • extern —— 外部函數(shù)(默認(rèn))
  • 在多文件開(kāi)發(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ù)的上面被聲明

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多