C语⾔函数调⽤及宏定义代码实例函数
#include<stdio.h>
int square(int x);
int square(int x){
return x * x;
}
/**
* 求x的平⽅
*/
int main(){
int i =1;
while(i <=100){
// i=1,1<=100,square(1)=1*1=1,i++=2,2-1=1,即1的平⽅=1
// i=2,i<=100,square(2)=2*2=4,i++=3,3-1=2,即2的平⽅=4
printf("%d的平⽅是%d\n",i-1,square(i++));
}
}
上⾯的代码很容易就能理解,下⾯尝试⽤宏定义的⽅式来实现功能。。。
宏定义
#include<stdio.h>
#define SQUARE(x)((x)*(x))
int main(void){
自定义函数怎么用c语言int i =1;
while(i <=100){
// SQUARE(i++)--->((i++)*(i++))
// 先取i再++,再取i再++,之后对取出的i求平⽅
// i=1,1<=100,i++,取i=1,后++=2,再取i=2,后++=3,i*i=1*2=2,i=3,3-1=2,即2²=2
// i=3,3<=100,i++,取i=3,后++=4,再取i=4,后++=5,i*i=3*4=12,i=5,5-1=4,即4²=12
// i=5,5<=100,i++,取i=5,后++=6,再取i=6,后++=7,i*i=5*6=30,i=7,7-1=6,即6²=30
printf("%d的平⽅是:%d\n",i-1,SQUARE(i++));
}
return0;
}
通过结果不难发现,宏定义求平⽅出错了。。。下⾯对代码进⾏拆分:
SQUARE(i++)通过拆分,变成:(i++) * (i++),
接着以下⾯步骤进⾏计算:
设i = 1,(1++) * (1++)
a.i++; // 取i = 1,后⾃增,i = 2
b.i++; // 取i = 2,后⾃增,i = 3,
c.1 * 2 = 2
d.i = 3,3 - 1 = 2,所以2[b中取出的2]的平⽅=2[c中求出的2]
备注:
在⼀定程度上,使⽤带参数的宏来代替函数实现⼀些简单的功能,程序的执⾏效率或许会⾼⼀些,因为宏定义是直接在预编译阶段替换到代码中,并不需要像函数⼀样,⼀次调⽤申请⼀次栈空间。
这并不意味着可以没有限制地使⽤宏定义,宏定义在使⽤时藏有许多的陷阱,如果⼀不⼩⼼就会写出带有bug的程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论