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