奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語(yǔ)言

C語(yǔ)言的預(yù)處理代碼

時(shí)間:2024-10-22 22:41:54 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言的預(yù)處理代碼

  導(dǎo)語(yǔ):預(yù)處理是程序在被編譯器編譯以前,由預(yù)處理器預(yù)先進(jìn)行的處理。預(yù)處理代碼含有“#”作為符號(hào)標(biāo)志,以區(qū)分其他源代碼。下面是C語(yǔ)言的預(yù)處理代碼,一起來(lái)學(xué)習(xí)下吧:

  1.#include 頭文件

  其實(shí)就是把 頭文件的內(nèi)容 全部替換到 當(dāng)前#include處。

  關(guān)于頭文件的好處、來(lái)源、用法可以參考http://blog.csdn.net/pashanhuxp/article/details/39927913一文

  補(bǔ)充:

  ①.#include 和 #include “XXX.h” 的區(qū)別:

  表示在編譯器定義的引用目錄查找.h頭文件;

  “XX” 表示先在項(xiàng)目當(dāng)前目錄查找.h頭文件,若沒(méi)有再去編譯器指定的目錄查找;

  所以,若引用自定義的.h頭文件,只能用#include “XX”。

 、.在Eclipse CDT下,#include "XX.h" 指引用usr/include 目錄下的頭文件,并不包括子文件夾的頭文件,若引用子文件夾下的頭文件,需要改為#include “XX/XX.h”

  2.#define 宏定義:

  宏定義也可以稱作“宏替換”,宏會(huì)在編譯之前被預(yù)處理程序替換掉。通常用大寫表示

  宏定義可以增加程序的可讀性和可維護(hù)性,比如 #define PI 3.14159

  并且宏替換函數(shù),可以提高運(yùn)行效率,減少函數(shù)調(diào)用造成的系統(tǒng)開(kāi)銷。比如 #define sum(a,b,c) (a+b+c) 比定義一個(gè)求和函數(shù)int sum(a,b,c)要節(jié)省內(nèi)存,提高效率。這里需要注意替換的意思,宏是被直接替換的,比如 #define AA a-b 若不加括號(hào),則在使用過(guò)程中,會(huì)出現(xiàn)cc*AA 變成 cc*a-b 的錯(cuò)誤。

  關(guān)于空的宏定義的補(bǔ)充:

  ①空的宏定義修飾函數(shù):#define SUM

  代碼中有時(shí)會(huì)出現(xiàn) #define SUM 并沒(méi)給宏SUM “賦值” 。這時(shí)可以將sum 理解成空的,無(wú)意義的。

  比如用來(lái)修飾函數(shù): SUM int getSum(a,b) 這時(shí)可以將SUM的作用理解為對(duì)函數(shù)作用進(jìn)行 簡(jiǎn)單的描述 ,使調(diào)用者更明白

  ②空的宏定義常見(jiàn)于頭文件中,防止頭文件的內(nèi)容被重復(fù)包含。(平時(shí):最好養(yǎng)成這種寫頭文件的習(xí)慣)

  #ifndef _8_4_2_H_

  #define _8_4_2_H_

  ...頭文件內(nèi)容...

  #endif /* 8_4_2_H_ */

  這時(shí) _8_4_2_H_ 宏就是一個(gè)空宏,用于條件編譯,有時(shí)常見(jiàn)于防止頭文件重復(fù)包含的用途中。給你舉個(gè)例子,再順便分析一下:假設(shè)你的工程里面有4個(gè)文件,分別是a.cpp,b.h,c.h,d.h。a.cpp的頭部是:#include "b.h "#include "c.h "b.h和c.h的頭部都是:#include "d.h "而d.h里面有class D的定義。這樣一來(lái),編譯器編譯a.cpp的時(shí)候,先根據(jù)#include "b.h "去編譯b.h這個(gè)問(wèn)題,再根據(jù)b.h里面的#include "d.h ",去編譯d.h的這個(gè)文件,這樣就把d.h里面的class D編譯了;然后再根據(jù)a.cpp的第二句#include "c.h ",去編譯c.h,最終還是會(huì)找到的d.h里面的class D,但是class D之前已經(jīng)編譯過(guò)了,所以就會(huì)報(bào)重定義錯(cuò)誤。

  如果在d.h中加上

  ifndef _D_H

  define _D_H

  .......頭文件內(nèi)容......比如定義class D

  endif

  就可以防止這種重定義錯(cuò)誤。

 、叟c條件編譯結(jié)合:

  #ifdefine WINDOWS

  ....針對(duì)windows的相關(guān)處理...

  #endif

  #ifdefine LINUX

  ...針對(duì)LINUX的相關(guān)操作.....

  #endif

  則,通過(guò)#define WINDOWS 或者 #define LINUX,可以實(shí)現(xiàn)多系統(tǒng)下編程。

 、#define后只有一個(gè)函數(shù),等價(jià)空函數(shù):#define FUNCTION(args)

  在頭文件中見(jiàn)到過(guò)這種情況,F(xiàn)UNCTION(args) 函數(shù)在這里define為空,則等價(jià)空函數(shù)實(shí)際不會(huì)進(jìn)行任何處理。

  通常,在這個(gè)頭文件中,還其他已賦值的這個(gè)語(yǔ)句 #define FUNCTION(args) (args*5)

  使用舉例:

  #ifdefine WIN

  #define FUNCTION(args) (args*5)

  #else

  #define FUNCTION(args)

  #endif

  如果define了WIN 則FUNCTION(args) 會(huì)進(jìn)行一些具體的操作,否則,F(xiàn)UNTION(args)并不會(huì)執(zhí)行任何處理。

  這樣定義,方便了調(diào)用者,即我在調(diào)用的時(shí)候,不需要花費(fèi)代碼去判斷是不是define了WIN,我都可以在我的代碼里直接使用FUNCTION(args)。定義了,則會(huì)對(duì)參數(shù)進(jìn)行處理,而沒(méi)有定義的話,不會(huì)對(duì)參數(shù)進(jìn)行改變。

 、葸有一些編譯器預(yù)定義宏,格式是“雙下劃線開(kāi)頭”。主要標(biāo)識(shí)一些編譯環(huán)境信息。比較少用到。

  3.#條件編譯

  使用條件編譯時(shí),會(huì)判斷是否編譯器編譯當(dāng)前的代碼段。提高編譯效率。

  #ifdef 條件

  代碼段。。。

  #endif

  解釋:若宏定義了條件,則執(zhí)行代碼段,否則不執(zhí)行。

  #if 條件

  代碼段。。。

  #endif

  解釋:若條件為真,則執(zhí)行代碼段,否則不執(zhí)行。

  使用舉例:

  #if 0

  A

  #endif

  實(shí)際本代碼中A從不執(zhí)行,這樣寫是為了方便以后調(diào)試更改,若想執(zhí)行A,則只改為 #if 1即可。

  4.#宏和函數(shù)的區(qū)別

  (1)看一個(gè)例子,比較兩個(gè)數(shù)或者表達(dá)式大小,首先我們把它寫成宏定義:

  #define MAX( a, b) ( (a) > (b) (a) : (b) )

  其次,把它用函數(shù)來(lái)實(shí)現(xiàn):

  int max( int a, int b)

  { return (a > b a : b) }

  很顯然,我們不會(huì)選擇用函數(shù)來(lái)完成這個(gè)任務(wù),原因有兩個(gè):

  首先,函數(shù)調(diào)用會(huì)帶來(lái)額外的開(kāi)銷,它需要開(kāi)辟一片?臻g,記錄返回地址,將形參壓棧,從函數(shù)返回還要釋放堆棧。這種開(kāi)銷不僅會(huì)降低代碼效率,

  而且代碼量也會(huì)大大增加,而使用宏定義則在代碼規(guī)模和速度方面都比函數(shù)更勝一籌;

  其次,函數(shù)的參數(shù)必須被聲明為一種特定的類型,所以它只能在類型合適的表達(dá)式上使用,我們?nèi)绻容^兩個(gè)浮點(diǎn)型的大小,就不得不再寫一個(gè)專門針對(duì)浮點(diǎn)型的比較函數(shù)。反之,上面的那個(gè)宏定義可以用于整形、長(zhǎng)整形、單浮點(diǎn)型、雙浮點(diǎn)型以及其他任何可以用“>”操作符比較值大小的類型,也就是說(shuō),宏是與類型無(wú)關(guān)的。

  (2)和使用函數(shù)相比,使用宏的不利之處在于每次使用宏時(shí),一份宏定義代碼的拷貝都會(huì)插入到程序中。除非宏非常短,否則使用宏會(huì)大幅度增加程序的長(zhǎng)度。

  (3)還有一些任務(wù)根本無(wú)法用函數(shù)實(shí)現(xiàn),但是用宏定義卻很好實(shí)現(xiàn)。比如參數(shù)類型沒(méi)法作為參數(shù)傳遞給函數(shù),但是可以把參數(shù)類型傳遞給帶參的宏。

  看下面的例子:

  #define MALLOC(n, type) /

  ( (type *) malloc((n)* sizeof(type))) // “/”為強(qiáng)制換行符,表示下一行其實(shí)是在上一行的。

  利用這個(gè)宏,我們就可以為任何類型分配一段我們指定的空間大小,并返回指向這段空間的指針。我們可以觀察一下這個(gè)宏確切的工作過(guò)程:

  int *ptr;

  ptr = MALLOC ( 5, int );

  將這宏展開(kāi)以后的結(jié)果:

  ptr = (int *) malloc ( (5) * sizeof(int) ); // 記住#define其實(shí)就是一個(gè)“宏替換”

  這個(gè)例子是宏定義的經(jīng)典應(yīng)用之一,完成了函數(shù)不能完成的功能,但是宏定義也不能濫用,通常,如果相同的代碼需要出現(xiàn)在程序的幾個(gè)地方,更好的

  方法是把它實(shí)現(xiàn)為一個(gè)函數(shù)。


【C語(yǔ)言的預(yù)處理代碼】相關(guān)文章:

C語(yǔ)言預(yù)處理概述09-30

C語(yǔ)言預(yù)處理知識(shí)06-13

有趣的C語(yǔ)言預(yù)處理07-29

C語(yǔ)言快速排序?qū)嵗a06-04

C語(yǔ)言兎子產(chǎn)子代碼07-30

C語(yǔ)言選擇排序算法及實(shí)例代碼07-25

C語(yǔ)言插入排序算法及實(shí)例代碼07-02

C語(yǔ)言合并排序及實(shí)例代碼詳解11-02

C語(yǔ)言代碼轉(zhuǎn)換為應(yīng)用程序10-15

10個(gè)經(jīng)典的C語(yǔ)言面試基礎(chǔ)算法及代碼10-06

主站蜘蛛池模板: 涞源县| 新乡县| 宜城市| 麻阳| 柳江县| 长岛县| 昌乐县| 旌德县| 金塔县| 安西县| 仁化县| 德保县| 苍山县| 乐山市| 温泉县| 贵定县| 全南县| 扬中市| 通州市| 通山县| 闽侯县| 玛沁县| 尉氏县| 灌南县| 久治县| 湖北省| 思茅市| 平邑县| 乌兰浩特市| 樟树市| 收藏| 思南县| 田林县| 开原市| 屏边| 澄江县| 阳春市| 芜湖市| 竹北市| 桃源县| 微博|