C語(yǔ)言不支持默認(rèn)參數(shù),不過(guò)可以用宏來(lái)模擬:
成都創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)、成都做手機(jī)網(wǎng)站、微商城、網(wǎng)站托管及網(wǎng)站維護(hù)、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都自上料攪拌車(chē)行業(yè)客戶提供了網(wǎng)站營(yíng)銷(xiāo)服務(wù)。
//---------------------------------------------------------------------------
#include stdio.h
#define DEFAULT 40 /*默認(rèn)參數(shù)值*/
#define FUN(A) fun(#A##"-") /*用于實(shí)現(xiàn)默認(rèn)參數(shù)的宏*/
int f(int n) /*用于實(shí)驗(yàn)?zāi)J(rèn)參數(shù)的函數(shù)*/
{
return printf("%d\n",n);
}
int fun(const char *a) /*確定函數(shù)調(diào)用的函數(shù),返回值類型要和實(shí)際需要調(diào)用的f()函數(shù)返回值類型一致*/
{
int n; /*變量的類型要和f()函數(shù)參數(shù)的類型一樣*/
if (a[0]=='-') n=DEFAULT;
else sscanf(a,"%d",n);
return f(n);
}
int main(void)
{
FUN();
FUN(67);
return 0;
}
//---------------------------------------------------------------------------
默認(rèn)返回的是int類型,如果沒(méi)有明確寫(xiě)出返回類型的話,默認(rèn)為int類型。void必須要明確寫(xiě)出來(lái)才可以,void是空類型,指的是函數(shù)不提供返回值,不是默認(rèn)的。
C語(yǔ)言中沒(méi)有參數(shù)默認(rèn)值的概念,但其實(shí)可以利用宏來(lái)模擬參數(shù)的默認(rèn)值;
我們之前介紹過(guò)可變參數(shù)宏與逗號(hào)運(yùn)算符,將兩者相結(jié)合的話可以定義出以下形式的宏:
當(dāng)在 func() 里不填寫(xiě)任何內(nèi)容的時(shí)候,正常情況下宏展開(kāi)后會(huì)是 func((default,)) ,但由于 ##__VA_ARGS__ 會(huì)將前面多余的逗號(hào)忽略,所以宏展開(kāi)后就相當(dāng)于 __func((default)) ;
當(dāng)在 func() 括號(hào)里填寫(xiě)有效值的時(shí)候,根據(jù)逗號(hào)運(yùn)算符的值等于最后一個(gè)表達(dá)式的值的性質(zhì),宏會(huì)被展開(kāi)為 __func((##__VA_ARGS__)) 既 default 被丟棄,傳入的值只有我們填寫(xiě)的內(nèi)容,通過(guò)這個(gè)技巧我們就可以設(shè)計(jì)出一個(gè)帶有默認(rèn)參數(shù)的函數(shù)。
示例:
定義一個(gè)函數(shù)默認(rèn)參數(shù)為 0xff ,不傳任何參數(shù)的時(shí)候打印 0xff ,傳入有效值的時(shí)候就打印我們傳入的內(nèi)容;
輸出:
??在許多c語(yǔ)言初學(xué)者中編寫(xiě)函數(shù)時(shí),都喜歡將無(wú)參函數(shù)中的參數(shù)類型忽略。
??但是實(shí)際上 默認(rèn)的參數(shù)類型 不是無(wú)參 void ,而是接受 任意數(shù)量和類型的參數(shù) 。也就是說(shuō) int func() 和 int func(void) 是不一樣的。下面通過(guò)一個(gè)例子加深了解一下在C語(yǔ)言中函數(shù)的默認(rèn)參數(shù)類型:
??所以說(shuō),在使用c語(yǔ)言編寫(xiě)無(wú)參函數(shù)時(shí),一定要把 void 寫(xiě)上去,不然會(huì)有安全隱患。
可以這樣調(diào)用。
int b=0指的是默認(rèn)參數(shù),調(diào)用時(shí)傳入或不傳入b都行,如果不傳入b的話,那么b的值就是0。
另外注意只有最后面的參數(shù)可以是默認(rèn)參數(shù)。
如果是定義的全局變量或者靜態(tài)變量,未初始化的話就是0.如果是局部變量,那就是以前殘留在堆棧里的隨機(jī)值。
區(qū)分變量的類型,有兩種情況。
1、局部變量。
局部變量在沒(méi)有顯式初始化時(shí),其值C語(yǔ)言規(guī)范沒(méi)做要求,可以是隨機(jī)值,也可以是編譯器隨意給定的值。
比如gcc編譯器的局部變量就是隨機(jī)值,可能為任何值。而微軟的編譯器,如VC或VS,則會(huì)初始化為全c,即0xCCCCCCCC。
2、全局變量或靜態(tài)局部變量。
所有的全局變量,即定義在函數(shù)外的變量,默認(rèn)值為0。
所有的靜態(tài)局部變量,即定義在函數(shù)內(nèi)部的static int name形式的,默認(rèn)初始化為0。
擴(kuò)展資料:
int是一種數(shù)據(jù)類型,在編程語(yǔ)言(C、C++、C#、Java等)中,是用于定義整數(shù)類型變量的標(biāo)識(shí)符。
目前在一般的電腦中,int占用4字節(jié),32比特,數(shù)據(jù)范圍為-2147483648~2147483647[-2^31~2^31-1]
在之前的微型機(jī)中,int占用2字節(jié),16比特,數(shù)據(jù)范圍為-32768~32767[-2^15~2^15-1]
定義方法:
int?i;//定義整形變量i
int?i=1;//定義整形變量i并初始化為1
定義常量:
const?int?i;//編譯錯(cuò)誤,因?yàn)槌A啃枰o予一個(gè)初值
const?int?i=1;//定義常量i,值為1
Java定義常量:
final?int?i=1;//定義常量i,值為1
參考資料來(lái)源:百度百科-INT (數(shù)據(jù)類型)