Sian 发表于 2014-3-7 10:47:17

宏定义与函数的区别

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]
查看完整版本: 宏定义与函数的区别