该楼层疑似违规已被系统折叠隐藏此楼查看此楼
但是请注意,由於K&RC中并不检查参数型态,so在此是用ANSI
C来说明,毕竟ANSIC是目前所有CCompiler都支援的标准;常在
网路上看到有人推荐K&RTheCProgrammingLanguage这本书,老
实说这本是不错(我以前也是看这本),但因为K&RC慢慢因为ANSI
C的完整标准出现,而面临考验,所以我建议若是初学者先从ANSIC
看起,等对ANSIC的标准了解後,再回头看这本(其实不看也没差,虽
然它号称C语言圣经,但时代在变,有些东东开始不适用。不过还是有
看的价值)
//
//固定的参数一定要放前面!!
intFUNC(intxx,...)
{
inttmp;
va_listarg_ptr;//用va_list声明指向引数列表的Pointer
va_start(arg_ptr,xx);//从引数表中取得第一个引数
//第一个引数就是xx自己(xx是最后一个固定变量)
tmp=va_arg(arg_ptr,int);//从引数表中取得int型态引数
//一直呼叫va_arg即可取得所
//有引数(第二个参数int是当前不定变量的类型)
va_end(arg_ptr);//取完後将arg_ptr=NULL
//以便归还stack空间(要在所有的不定变量引用完之后再用va_end(),否则会有无法预测的结果。)
}
理论上不定参数是可以无限多的,但碍於memory及stack大小
所以项数通常有上限,如TurboC最多200个,一超过就出现如下
"Fatalstackoverflowerror-Systemhalted",然後当掉,你连
暖开机都不行;所以当你使用一套Compiler时一定要有其参考手册
或资料,以免搞半天除错後,还找不出原因!!
(P.S.像TurboC2.0只能用4000个if,....太多要注意的!!)
说了一堆,不知道你会用了没?!最後用一个画多边型的函数做□
例,顺便做结束。
/*EX*/
#include//记得要include才能用
#defineEND_P-400//用来判断是否为最後一个参数
voidDrawPoly(intcolor,...)
{
va_listarg_ptr;
intx[200],y[200];//最多200个点
intp_c=0;//计算有几点
inti;//计数器
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);
}