C語言中沒有參數(shù)默認(rèn)值的概念,但其實可以利用宏來模擬參數(shù)的默認(rèn)值;

創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元魯?shù)樽鼍W(wǎng)站,已為上家服務(wù),為魯?shù)楦鞯仄髽I(yè)和個人服務(wù),聯(lián)系電話:18982081108
我們之前介紹過可變參數(shù)宏與逗號運算符,將兩者相結(jié)合的話可以定義出以下形式的宏:
當(dāng)在 func() 里不填寫任何內(nèi)容的時候,正常情況下宏展開后會是 func((default,)) ,但由于 ##__VA_ARGS__ 會將前面多余的逗號忽略,所以宏展開后就相當(dāng)于 __func((default)) ;
當(dāng)在 func() 括號里填寫有效值的時候,根據(jù)逗號運算符的值等于最后一個表達(dá)式的值的性質(zhì),宏會被展開為 __func((##__VA_ARGS__)) 既 default 被丟棄,傳入的值只有我們填寫的內(nèi)容,通過這個技巧我們就可以設(shè)計出一個帶有默認(rèn)參數(shù)的函數(shù)。
示例:
定義一個函數(shù)默認(rèn)參數(shù)為 0xff ,不傳任何參數(shù)的時候打印 0xff ,傳入有效值的時候就打印我們傳入的內(nèi)容;
輸出:
如果是定義的全局變量或者靜態(tài)變量,未初始化的話就是0.如果是局部變量,那就是以前殘留在堆棧里的隨機(jī)值。
區(qū)分變量的類型,有兩種情況。
1、局部變量。
局部變量在沒有顯式初始化時,其值C語言規(guī)范沒做要求,可以是隨機(jī)值,也可以是編譯器隨意給定的值。
比如gcc編譯器的局部變量就是隨機(jī)值,可能為任何值。而微軟的編譯器,如VC或VS,則會初始化為全c,即0xCCCCCCCC。
2、全局變量或靜態(tài)局部變量。
所有的全局變量,即定義在函數(shù)外的變量,默認(rèn)值為0。
所有的靜態(tài)局部變量,即定義在函數(shù)內(nèi)部的static int name形式的,默認(rèn)初始化為0。
擴(kuò)展資料:
int是一種數(shù)據(jù)類型,在編程語言(C、C++、C#、Java等)中,是用于定義整數(shù)類型變量的標(biāo)識符。
目前在一般的電腦中,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;//編譯錯誤,因為常量需要給予一個初值
const?int?i=1;//定義常量i,值為1
Java定義常量:
final?int?i=1;//定義常量i,值為1
參考資料來源:百度百科-INT (數(shù)據(jù)類型)
??在許多c語言初學(xué)者中編寫函數(shù)時,都喜歡將無參函數(shù)中的參數(shù)類型忽略。
??但是實際上 默認(rèn)的參數(shù)類型 不是無參 void ,而是接受 任意數(shù)量和類型的參數(shù) 。也就是說 int func() 和 int func(void) 是不一樣的。下面通過一個例子加深了解一下在C語言中函數(shù)的默認(rèn)參數(shù)類型:
??所以說,在使用c語言編寫無參函數(shù)時,一定要把 void 寫上去,不然會有安全隱患。
C語言不支持默認(rèn)參數(shù),不過可以用宏來模擬:
//---------------------------------------------------------------------------
#include stdio.h
#define DEFAULT 40 /*默認(rèn)參數(shù)值*/
#define FUN(A) fun(#A##"-") /*用于實現(xiàn)默認(rèn)參數(shù)的宏*/
int f(int n) /*用于實驗?zāi)J(rèn)參數(shù)的函數(shù)*/
{
return printf("%d\n",n);
}
int fun(const char *a) /*確定函數(shù)調(diào)用的函數(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;
}
//---------------------------------------------------------------------------
可以這樣調(diào)用。
int b=0指的是默認(rèn)參數(shù),調(diào)用時傳入或不傳入b都行,如果不傳入b的話,那么b的值就是0。
另外注意只有最后面的參數(shù)可以是默認(rèn)參數(shù)。
分享題目:c語言給函數(shù)默認(rèn)值,c語言函數(shù)參數(shù)默認(rèn)值
標(biāo)題網(wǎng)址:http://chinadenli.net/article8/dsegiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、、小程序開發(fā)、微信小程序、電子商務(wù)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)