c语言函数不定参数宏定义 c语言 不定参数

在C语言中 宏定义是什么?

在C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。

创新互联服务项目包括临沂网站建设、临沂网站制作、临沂网页制作以及临沂网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,临沂网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到临沂省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

扩展资料:

宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。

计算机语言如C语言或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。

参考资料:

宏定义百度百科

C语言中的宏定义怎么用?

C语言中的宏定义用法分为两种。

1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。

2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) a*b area=S(3. 2)。

扩展资料:

宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。

使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。

c语言中如何实现不定长参数的宏?

宏很难实现变长参数,不过c提供了函数来处理,在c中printf,scanf等函数就是处理变长参数列表的。

如:

#include stdio.h

#include stdarg.h

void print_ints(int, num_of_args, ...)

{

int total = 0, i;

va_list ap;

va_start(ap, num_of_args);

while(num_of_arg--){

i = va_arg(ap, int);

printf("%d\n", i);

total += i;

}

printf("Total is %d \n", total);

va_end(ap);

}

如果使用

print_int(3, 20, 35, 15);

来调用,则输出:

20

35

15

Total is 70

有关函数:

va_start(argptr, parm) 使用argptr对参数列表和第二个参数parm的名称进行初始化

va_arg(argptr, type) 返回参数表中的下一个参数,它必须包含所指定的type

va_end(argptr) 终止参数读取

C语言怎么实现函数不定参数

C语言中定义了va_list, va_start( ), va_arg( ), va_end( ) 这样一组宏来处理可变参数问题。

可以参考printf的声明,创建自己的实现函数。示例:

#includestdio.h

#includestdarg.h

void va_fun(int start,...)

{

va_list arg_ptr;

int nArgValue = start;

int nArgCount = 1;

va_start(arg_ptr,start);

while(nArgValue != -1)

{

printf("arg %d is:%d/n",nArgCount,nArgValue);

nArgValue=va_arg(arg_ptr,int);

++nArgCount; 

}

return; 

}

main()

{

va_fun(5,1,7,-1);

printf("................/n");

va_fun(2,4,-1);

printf("................/n");

va_fun(-1);

printf("................/n");

//va_fun(); 可变参数函数最少要有一个参数。

}

c语言宏定义有无参数的区别

你是指带参的和不带参数的?

不管带不带参数,一定要记住一点,“原样替换”是宏定义的本质。

在处理之前做了文本替换的工作。

如果说区别的话, 带参数的需要将对应的文本导入到宏定义的定义中去然后再替换,比不带参数多了一步

#define M(y) y*y+3*y /*宏定义*/

k=M(5); /*宏调用*/

那么在编译之前就会变成

k= 5*5 + 3*5

#define M(y) y*y+3*y /*宏定义*/

k=M(3+x); /*宏调用*/

那么在编译之前就会变成

k=3+x*3+x+3*3+x (注意这里原样替换,不能加括号的)

如何定义不定参数函数

不定参数个数 传递时要指明其参数类型

还有文件包含库 你也没包含进来~

#include stdarg.h //函数可变参数宏包含在此文件中(属于C语言的标准库)

给你一个例子:

/*

功能名称: aveage 通过可变参数宏来完成N个数的平均值计算

入口参数: ParaNum 参数个数 , ... 可能的参数

出口参数: 平均值float

备注名称:

日期版本:

*/

float average(int ParaNum,...);

float average(int ParaNum,...)

{

va_list va_Average;

int count;

long sum;

va_start(va_Average,ParaNum);//va_start 第二个参数为... 的前一个参数

for(count = 1;countParaNum;count++)

{

sum += (long)(va_arg(va_Average,int));

}

va_end(va_Average);

return (float)(sum/ParaNum);

}

不定参数传递的时候,是有标准库的。


当前文章:c语言函数不定参数宏定义 c语言 不定参数
文章分享:http://ybzwz.com/article/dooipdj.html