c语言如何实现不定参数,C语言中不定参数的实现
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
但是請(qǐng)注意,由於?K&R?C?中并不檢查參數(shù)型態(tài),so?在此是用?ANSI
C?來(lái)說(shuō)明,畢竟?ANSI?C?是目前所有?C?Compiler?都支援的標(biāo)準(zhǔn);常在
網(wǎng)路上看到有人推薦?K&R?The?C?Programming?Language?這本書(shū),老
實(shí)說(shuō)這本是不錯(cuò)(我以前也是看這本),但因?yàn)?K&R?C?慢慢因?yàn)?ANSI
C?的完整標(biāo)準(zhǔn)出現(xiàn),而面臨考驗(yàn),所以我建議若是初學(xué)者先從?ANSI?C
看起,等對(duì)?ANSI?C?的標(biāo)準(zhǔn)了解後,再回頭看這本(其實(shí)不看也沒(méi)差,雖
然它號(hào)稱(chēng)?C?語(yǔ)言圣經(jīng),但時(shí)代在變,有些東東開(kāi)始不適用。不過(guò)還是有
看的價(jià)值)
//
//?固定的參數(shù)一定要放前面!!
int?FUNC(int?xx,...)
{
int?tmp;
va_list?arg_ptr;?//?用va_list聲明指向引數(shù)列表的?Pointer
va_start(arg_ptr,xx);?//?從引數(shù)表中取得第一個(gè)引數(shù)
//?第一個(gè)引數(shù)就是?xx?自己(xx是最后一個(gè)固定變量)
tmp=va_arg(arg_ptr,int);?//?從引數(shù)表中取得int?型態(tài)引數(shù)
//?一直呼叫?va_arg?即可取得所
//?有引數(shù)(第二個(gè)參數(shù)int是當(dāng)前不定變量的類(lèi)型?)
va_end(arg_ptr);?//?取完後將?arg_ptr?=?NULL
//?以便歸還?stack?空間(要在所有的不定變量引用完之后再用va_end(),否則會(huì)有無(wú)法預(yù)測(cè)的結(jié)果。)
}
理論上不定參數(shù)是可以無(wú)限多的,但礙於?memory?及?stack?大小
所以項(xiàng)數(shù)通常有上限,如?Turbo?C?最多?200?個(gè),一超過(guò)就出現(xiàn)如下
"?Fatal?stack?overflow?error-System?halted?",然後當(dāng)?shù)?#xff0c;你連
暖開(kāi)機(jī)都不行;所以當(dāng)你使用一套?Compiler?時(shí)一定要有其參考手冊(cè)
或資料,以免搞半天除錯(cuò)後,還找不出原因!!
(P.S.?像?Turbo?C?2.0?只能用?4000?個(gè)?if?,....太多要注意的!!)
說(shuō)了一堆,不知道你會(huì)用了沒(méi)?!?最後用一個(gè)畫(huà)多邊型的函數(shù)做□
例,順便做結(jié)束。
/*?EX?*/
#include??//?記得要?include?才能用
#define?END_P?-400?//?用來(lái)判斷是否為最後一個(gè)參數(shù)
void?DrawPoly(int?color,...)
{
va_list?arg_ptr;
int?x[200],y[200];?//?最多?200?個(gè)點(diǎn)
int?p_c=0;?//?計(jì)算有幾點(diǎn)
int?i;?//?計(jì)數(shù)器
va_list(arg_ptr,color);
while(((x[p_c]=va_arg(arg_ptr,int))>END_P)?\
&&((y[p_c]=va_arg(arg_ptr,int))>END_P)\
&&?p_c<=200)?//?不是最後一點(diǎn)且小於?200?個(gè)點(diǎn)
p_c++;
if(p_c<3)?return?;?//?不到?3?點(diǎn)不成一多邊型,So?跳出
for(i=0;i
//?劃線,每個(gè)?Compiler?不同,自行修改
line(x[i],y[i],x[i+1],y[i+1],color);
//?最後一條線
line(x[0],y[0],x[p_c-1],y[p_c-1],color);
va_end(arg_ptr);
}
總結(jié)
以上是生活随笔為你收集整理的c语言如何实现不定参数,C语言中不定参数的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言指针自定义函数,c语言函数指针定义
- 下一篇: c语言成绩转换绩点,如何将平时成绩转化为