#include?stdio.h
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站與策劃設(shè)計(jì),東營(yíng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:東營(yíng)等地區(qū)。東營(yíng)做網(wǎng)站價(jià)格咨詢:18982081108
#define?Pow2(x)?((x)*(x))
#define?Pow3(x)?((x)*(x)*(x))
int?main(void)
{
int?a?=?10;
printf("%d^2=%d\n",a,Pow2(a));
printf("%d^3=%d\n",a,Pow3(a));
return?0;
}
#include #include是固定格式,意思是”包含“,中的stdio.h,這是一個(gè)庫(kù)函數(shù)頭,用括起來(lái),這句意思是把名為stdio.h的頭(其實(shí)是一個(gè)文件)包含到當(dāng)前的程序中。在C語(yǔ)言中,有許多函數(shù)可以直接拿來(lái)用,比如printf函數(shù)(輸出函數(shù)),這些函數(shù)被稱為庫(kù)函數(shù),要想調(diào)用這些函數(shù),就要給出相應(yīng)的庫(kù)函數(shù)頭,不同的庫(kù)函數(shù)需要給出不同的頭,庫(kù)函數(shù)頭的含義是”將這些函數(shù)的定義包含到程序中去“,因?yàn)槟愕某绦蛑袥](méi)有這些庫(kù)函數(shù)的定義,所以你想要調(diào)用某些庫(kù)函數(shù),就要給出相應(yīng)的頭,將函數(shù)的定義包含到程序中是有編譯器完成的
#define CUBE(x) (x*x*x) 這是C語(yǔ)言中的宏定義,宏分為簡(jiǎn)單的宏和帶參數(shù)的宏,宏有什么作用?宏的一般格式是”#define 記號(hào) 替換列表“其中# define是“定義”的意思,也算是固定格式吧,記號(hào)可以是字母,符號(hào)等一切可能出現(xiàn)的東西,比如說(shuō)#define CUBE(x) (x*x*x) 中的CUBE,一般用大寫字母(C語(yǔ)言程序員數(shù)十年遵循的規(guī)范,希望你不要打破哦);"替換列表“可以是表達(dá)式,語(yǔ)句等等(比如#define CUBE(x) (x*x*x) 中的(x*x*x),表示計(jì)算X的立方)。宏的作用是將程序中出現(xiàn)的所有記號(hào)用替換列表代替。比如說(shuō)#define CUBE(x) (x*x*x)中,只要程序中出現(xiàn)CUBE(x) ,編譯器(這個(gè)工作是有編譯器完成的)就把CUBE(x) 替換為(x*x*x)。簡(jiǎn)單的宏比如#define N 10,在程序中凡是有N的地方都將被替換為10.帶參數(shù)的宏比如說(shuō)你的程序中的宏#define CUBE(x) (x*x*x),CUBE是記號(hào),括號(hào)中的x是參數(shù),就像一個(gè)函數(shù),在程序中用的時(shí)候,比如出現(xiàn)i=CUBE(10);那么就將被替換為i=(10*10*10); i的值將被賦予10的立方。
main() 是C語(yǔ)言中的主函數(shù),C語(yǔ)言是由函數(shù)組成的,其中主函數(shù)(或稱main函數(shù))是必須有的,程序執(zhí)行的時(shí)候是由主函數(shù)開(kāi)始執(zhí)行的,主函數(shù)內(nèi)容要用{}括起來(lái)
int n=5; 定義變量n并賦與n值為5. int表示變量n的類型是整型,n=5是將n的值初始化為5(以后換可以改變),后面的分號(hào)是必須有的,C語(yǔ)言規(guī)定每條語(yǔ)句后都應(yīng)該以分號(hào)結(jié)尾。
int s=CUBE(++n); 定義s為整型并賦予s的值為CUBE(++n),CUBE(++n)前面已經(jīng)說(shuō)過(guò)了,它將被替換為(++n*++n*++n),其中++n是一種算數(shù)運(yùn)算符,就像乘除加減法一樣,++n的意義是將n自增1,整個(gè)表達(dá)式(即++n)不變,這里要分清變量和表達(dá)式,比如a+b,變量是a和b,表達(dá)式是a+b,。所以這里s就等于125.
printf(“%d”,s); 這是一個(gè)輸出函數(shù),%d表示S的類型為整形,輸出s的值。
函數(shù)式宏(function-like macro)較之對(duì)象式宏可以進(jìn)行更復(fù)雜的代換。
函數(shù)式宏 sqr 是在編譯時(shí)展開(kāi)并填入程序的,因此 只要是能用雙目運(yùn)算符 * 進(jìn)行乘法計(jì)算的數(shù)據(jù)類型,都能使用函數(shù)式宏 。
函數(shù)定義則需為每個(gè)形參都定義各自的數(shù)據(jù)類型,返回值的類型也只能為一種。就這點(diǎn)而言,函數(shù)較為嚴(yán)格。
函數(shù)為我們默默無(wú)聞地進(jìn)行了一些復(fù)雜處理,如:
而函數(shù)式宏所做的工作只是宏展開(kāi)和填入程序,并不進(jìn)行上述處理。
根據(jù)以上特征, 函數(shù)式宏或許能使程序的運(yùn)行速度稍微提高一點(diǎn),但是程序自身卻有可能變得臃腫 。
函數(shù)式宏在使用上必須小心謹(jǐn)慎。例如, sqr(a++) 展開(kāi)后 ((a++) * (a++)) 。每次展開(kāi), a 的值都會(huì)自增兩次。在不經(jīng)意間表達(dá)式被執(zhí)行了兩次,導(dǎo)致程序出現(xiàn)預(yù)料之外的結(jié)果,我們稱這種情況為宏的 副作用(side effect) 。
這樣寫就可以了:
double fun_x3 (double x) { return x*x*x; }
程序例子,計(jì)算2的3次方。
#include stdio.h
double fun_x3 (double x) { return x*x*x;}
int main(){
double y;
int x=2;
y = fun_x3(x); //用 fun_x3(x) 或 fun_x3(2) 調(diào)用即可
printf("%g ", y ); // %g 是自動(dòng)優(yōu)化格式
return 0;
}