當出于某些原因需要對數(shù)據(jù)做出修改,只要修改宏定義就行了,而不必在整個源文件中修改。
公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出沈北新免費做網(wǎng)站回饋大家。
而至于某些人說的可以加快CPU處理速度、宏運行的速度更快,我并不認同。
編譯器對于源文件首先是進行宏替換,然后再編譯連接,不管是對于編譯后得到程序的運行效率還是編譯器編譯速度都沒有提升
預(yù)處理運算符# #為宏擴展提供了一種連接實際變元的手段。如果替換文本中的參數(shù)用 # #相
連,那么參數(shù)就被實際變元替換, # #與前后的空白符被刪除,并對替換后的結(jié)果重新掃描。例
如,下面定義的宏p a s t e用于連接兩個變元:
#define paste( front, back ) front ## back
從而宏調(diào)用paste(name, 1)的結(jié)果是建立單詞n a m e 1。
不僅僅是函數(shù),定義和宏的主要區(qū)別在預(yù)編譯的時候,定義在預(yù)編譯的時候的主要操作時分配空間或內(nèi)存,宏是進行了替換。比如#define n1000 ,預(yù)編譯的時候所有的n此時全部換成了1000,若int n =1000;只是這個n是1000,如果后邊還有用到的n,此時還可以理解是n,而不是1000
#define sort (int *a)
但以數(shù)組名即數(shù)組首地址作為參數(shù)傳遞,不能實現(xiàn)任何功能。。。
如 #define PI 3.1514
那么在程序中可調(diào)用PI求與角度有關(guān)的數(shù)據(jù)。
#define s(x) x+x
那么在程序中出現(xiàn)調(diào)用s(x)的就直接用x+x代入就好了,注意,不是代入結(jié)果,而是將表達式代入。。。
的確是不可以當函數(shù)的參數(shù),但是可以換一個間接的思路。
將宏定義放在另一個函數(shù)里,通過取地址的方式來把你原先想去處理的參數(shù)進行處理。
示例如下:
#includestdio.h
#define cal(m) {m = m + 10;}
int main(void)
{
int Val_0 = 20;
test(Val_0);
printf("%d", Val_0);
system("pause");
}
int test(int *n)
{
cal(*n);
printf("hello\n");
return 0;
}
會出錯吧,宏定義替換的是一個常數(shù),如果是用宏來計算什么的話,也是將函數(shù)過程給放上去,得出值后被宏名替換,直接替換函數(shù)名是不可行的