OPPO手机实验室有没有实验室

下次自动登录
现在的位置:
& 综合 & 正文
C语言宏定义函数的使用(定义单行和多行)
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高的可移植性和可读性等。
  在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。
宏定义中允许包含两行以上命令的情形,此时必须在最右边加上"\"且该行"\"后不能再有任何字符,连注释部分都不能有,下面的每行最后的一定要是"\","\"后面加一个空格都会报错,更不能跟注释。
  我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:
  #define MAX( a, b) ( (a) & (b) (a) : (b) )
  其次,把它用函数来实现:
  int max( int a, int b)
  return (a & b a : b)
  很显然,我们不会选择用函数来完成这个任务,原因有两个:首先,函数调用会带来额外的开销,它需要开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。这种开销不仅会降低代码效率,而且代码量也会大大增加,而使用宏定义则在代码规模和速度方面都比函数更胜一筹;其次,函数的参数必须被声明为一种特定的类型,所以它只能在类型合适的表达式上使用,我们如果要比较两个浮点型的大小,就不得不再写一个专门针对浮点型的比较函数。反之,上面的那个宏定义可以用于整形、长整形、单浮点型、双浮点型以及其他任何可以用“&”操作符比较值大小的类型,也就是说,宏是与类型无关的。
  和使用函数相比,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都会插入到中。除非宏非常短,否则使用宏会大幅度增加程序的长度。
  还有一些任务根本无法用函数实现,但是用宏定义却很好实现。比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏。
  看下面的例子:
  #define MALLOC(n, type) \
  ( (type *) malloc((n)* sizeof(type)))
  利用这个宏,我们就可以为任何类型分配一段我们指定的空间大小,并返回指向这段空间的指针。我们可以观察一下这个宏确切的工作过程:
  ptr = MALLOC ( 5, int );
  将这宏展开以后的结果:
  ptr = (int *) malloc ( (5) * sizeof(int) );
  这个例子是宏定义的经典应用之一,完成了函数不能完成的功能,但是宏定义也不能滥用,通常,如果相同的代码需要出现在程序的几个地方,更好的方法是把它实现为一个函数。
  下面总结和宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。
define的单行定义
#define maxi(a,b) (a&;b?a:b)define的多行定义define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)#define
MACRO(arg1,
关键是要在每一个换行的时候加上一个 "\ "//宏定义写出swap(x,y)交换函数#define swap(x, y)\x = x +\y = x -\x = x -
自己写的一个小例子:
// 不能加 *
也是一种类型
int *t = MALLOC(1,int);\
for(i=0; i&n-1; i++)\
for(j=0; j&n-1-i; j++)\
if(*(a+j) & *(a+j+1))\
*t = *(a+j);\
*(a+j) = *(a+j+1);\
*(a+j+1) = *t;\
int main(int argc,
const char * argv[])
int a=10, b=
int data[]={3,200,5};
//swap(&a, &b);
// sort(data, 3);
//和队列一样:会依据专题的(shi can)参数
自动识别类型
SORT(data, 3);
//会主动用实参
for(int i=0;i&3;i++)
cout && data[i]
//printf("%d
%d", a, b);
&&&&推荐文章:
【上篇】【下篇】c语言中在一个函数中定义了一个数组,在另外一个函数中如何使用这个数组
全部答案(共1个回答)
是乍想的,不知道是不是有什么其它好处
数组不可以直接返回,只能通过参数传递出来,比如:
void fun(int* p);
int main()
int a[1...
#include&stdio.h&
#define N 5
int eliminate3(int a[],int b[])
int i,k=0;
...
没有别的办法,唯一的方法是循环,一个一个输出
你可以写一个通用的输出整型数组的方法,参数是整形指针和需要显示的整数的数量,这样处理起来就方便了
定义数组时int a[LEN];长度len只能是常数或者相当于常数的宏
你可以先定义一个指针int *p;在cin&&n后,p = new int[n];...
奇瓦伊Casa Andina Classic Colca怎么样?有人住过吗?
答: 如果你理解能力强考数据库,其中比如关系数据库之类的需要去领悟
如果你记忆能力强考网络,各种各样的名词,背下来就得分。
还有官方指定的教材要有,上机最好做一做...
答: 新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础
如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区> 问题详情
以下正确的描述是:在C语言程序中______。A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定
悬赏:0&答案豆
提问人:匿名网友
发布时间:
以下正确的描述是:在C语言程序中______。A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义和函数的调用均可以嵌套C.函数的定义和函数的调用均不可以嵌套D.函数的定义不可以嵌套,但函数的调用可以嵌套请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
网友回答(共4条)展开
匿名网友&&&&&&&&提问收益:0.00&答案豆
匿名网友&&&&&&&&提问收益:0.00&答案豆
匿名网友&&&&&&&&提问收益:0.00&答案豆
您可能感兴趣的试题
1一个源文件中定义的外部变量的作用域为______。A.本文件的全部范围B.本程序的全部范围C.本函数的全部范围D.从定义该变量的位置开始至本文件结束2有如下程序 void f(int x,int y) { int t; if(x>y){t=x;x=y;y=t;} } main() { int a=4,b=3,c=5; f(a,b);f(b,c);f(c,a); print("%d,%d,%d\n",a,b,c); }执行后输出结果是______。A.3,4,5B.5,3,4C.5,4,3D.4,3,53有如下程序 int func(int a,int b) { return(a+b); } main() { int x=3,y=6,z=7,r; r=func(func(x,y),z); printf("%\d\n",r); }该程序的输出的结果是______。A.14B.15C.16D.174有如下程序 long fib(int n) { if(n>2)return(fib(n-1)-fib(n-2)); else return(1); } main() { printf("%d\n",fib(5)); }该程序的输出结果是______。A.-3B.-2C.-1D.0
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
找答案会员
享三项特权
找答案会员
享三项特权
找答案会员
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
常用邮箱:
用于找回密码
确认密码:C语言中,为什么有的自定义函数中,函数名前面有个
void ,例如void encryptchar(),它是说数据类型是空的吗
类型说明符“void”表示相关信息的返回值为空类型。
用void标识的函数常用于完成某项特定的处理任务,执行完成后不向调用者返回函数值,这类函数类似于其它语言的过程。
至于函数名后面括号中,只有一个void,则表示该函数无参数,函数不接受任何参数。如果括号内什么也没有,则表示该函数无参数,实际调用时,即使有实参也不起作用。与只有一个void时类似。
如果函数中的参数前面有void,由表示这个参数存在,但是不可用,如果在函数体中使用这个参数就会报错。
如果函数有多个参数,其中标识void的参数会影响到实际参数的传递顺序情况,根据不同的情况(类型声明在参数之前和类型声明在参数之后)而有所变化。
严格的,函数参数必须声明其类型,便于编译器进行检查编译,否则可能会产生无法预料的错误。
例如:
下面的函数声明都是合法的
/*传统格式,不提倡*/
mysum(a,b)
/*现代格式,提倡*/
mysum(int a,int b)...
类型说明符“void”表示相关信息的返回值为空类型。
用void标识的函数常用于完成某项特定的处理任务,执行完成后不向调用者返回函数值,这类函数类似于其它语言的过程。
至于函数名后面括号中,只有一个void,则表示该函数无参数,函数不接受任何参数。如果括号内什么也没有,则表示该函数无参数,实际调用时,即使有实参也不起作用。与只有一个void时类似。
如果函数中的参数前面有void,由表示这个参数存在,但是不可用,如果在函数体中使用这个参数就会报错。
如果函数有多个参数,其中标识void的参数会影响到实际参数的传递顺序情况,根据不同的情况(类型声明在参数之前和类型声明在参数之后)而有所变化。
严格的,函数参数必须声明其类型,便于编译器进行检查编译,否则可能会产生无法预料的错误。
例如:
下面的函数声明都是合法的
/*传统格式,不提倡*/
mysum(a,b)
/*现代格式,提倡*/
mysum(int a,int b)
{}
下面两种带有void的参数说明,对实际参数调用时,传递值发生影响(TC)。例如:调用函数 mysum(20,10);语句:
mysum(a,b)
{}
上面参数b的值得到的是10。
mysum(void a,int b)
{}
上面参数b的值得到的是20。
其他答案(共1个回答)
没有返回类型
在括号里应该是说该函数没有参数
楼上的回答太长,我来概括一下。
1。 void 用来做函数返回,表示函数不返回任何值,如下:
void fun()
int i = 0;...
编译器在编译c源代码时,首先会从本文件中查找对应的函数,如果找不到,就从头文件中去查找,如果找不着就报错。
你想在只让特定的函数被特定的函数调用,你就将该函数...
void在函数括号内:该函数的参数为空,或者说该函数不带参数
void在函数前面:该函数返回值为空。
希望能给你帮助。
可以的,你可以用嵌套函数,在另一个函数中用它
在b.c中声明extern func(void),然后就可以直接使用func了
亚松森El Jardin Hostal怎么样?有人住过吗?
答: 如果你理解能力强考数据库,其中比如关系数据库之类的需要去领悟
如果你记忆能力强考网络,各种各样的名词,背下来就得分。
还有官方指定的教材要有,上机最好做一做...
答: 新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础
如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415}

我要回帖

更多关于 手机病症实验室台词 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信