关闭

C语言与宏

145人阅读 评论(0) 收藏 举报

       宏定义又称为宏代换、宏替换,简称“宏”。

     一、不带参数的宏定义:

     格式: #define 标识符 字符串

     标识符常称为宏名。

     例:   #define PI 3.1415926   把程序中出现的PI全部换成3.1415926

     二、带参数的宏定义:

    格式:   #define 宏名(参数表) 字符串

    #define S(a,b) a*b

    area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;

    类似于函数调用。

    三、使用宏的注意事项

   1、 宏名一般用大写

   2、使用宏可提高程序的通用性和易读性

   3、宏定义末尾不加分号

   4、 “#undef指令取消名字的宏定义,这样做可以保证后续的调用时函数调用”

    5、宏定义可以嵌套
    6、 字符串" "中不包含宏
    7、 宏定义不分配内存,变量定义分配内存。
     8、实参如果是表达式容易出问题

#define S(r) r*r

area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;

正确的宏定义是#define S(r) ((r)*(r))
    9、宏名和参数的括号间不能有空格。
    10、宏替换只作替换,不做计算,不做表达式求解。
    11、函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
     四、宏与函数的异同
     1、一般来说可以将宏看成一个简单的函数,只是宏不能进行入参类型检查。
      2、函数只有一个返回值,利用宏则可以设法得到多个值。
      3、宏展开使源程序变长,函数调用不会。
      4、宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1154次
    • 积分:92
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论