年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2287|回复: 0

宏定义与函数的区别

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

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

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-29 17:51 , Processed in 0.046476 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表