宏定义与函数的区别
1、函数实现加法运算/*
1、定义一个加法函数,实现返回两个整数的和;
2、调用该函数实现加法;
*/
#include <stdio.h>
int sum(int , int);// 函数声明;
int main() {
int result = sum(5, 4);// 调用函数,将返回结果赋值给result ;
printf("result = %d\n", result); // 打印结果;
system("pause");
return 0;
}
int sum(int v1, int v2) {// sum函数体;
return (v1 + v2);// 返回两整数之后;
}
2、预处理宏实现加法运算/*
1、宏是一种预处理指令,在编译时自动翻译成对应的值,但不执行任何计算;
2、宏的定义:defind 标识符 替代符
3、宏定义是一种文本运算,所以要特别注意替换后的结果,为保证准确性,在每个参数中都加"()";
4、如:sum(v1,v2) v1+v2 在代码中如果是sum(1,2)*sum(2,3) 结果会翻译成1+2*2+3,造成结果失真;
*/
#define sum(v1, v2) ((v1)+(v2))// 定义一个宏 ,注意后面不要带";",否则";"会一同被翻译过去
#include <stdio.h>
int main() {
int s1 = sum(5, 4);// 编译时预处理为int s1 = (5)+(4);
int s2 = sum(1, 2) * sum(2, 3);// 编译预处理翻译为int s2 = ((1)+(2)) * ((2)+(3)) 如果外面不加"()"则是(1)+(2)*(2)+(3)
int s3 = sum(4/4, 2/2);// 编译预处理翻译为int s3 = ((4/4) + (2/2)) 如果里面不加"()"则是(4/4+2/2),无法保证准确性;
printf("s1=%d, s2=%d, s3=%d\n", s1, s2, s3); // 打印结果;
#define COUNT 5// 定义一个不带参数的宏 ,一般全大写
printf("COUNT = %d\n", COUNT);
#undef COUNT// 标识预处理结束,宏定义也是有作用域的,后面再用COUNT编译时会报错
system("pause");
return 0;
}
宏在编译时直接翻译成相对应的值,从某种程序上来说比函数效率要高,因为这种方式只在编译时消耗硬件资源,运行时已经不再执行;
页:
[1]