美文网首页
带参数的宏

带参数的宏

作者: 改个昵称好难 | 来源:发表于2019-02-18 01:34 被阅读0次

带参数的宏


在某些情况下,使用带参数的宏可以在程序预处理阶段生成内联代码[1],避免由于函数调用带来的额外开销。而作为副作用,最终生成的代码可能会大于使用函数的程序。所以,在使用带参数的宏之前往往需要考虑是否需要。由于带参数的宏的本质还是在程序预处理过程时进行字符串的替换,因此需要注意以下几点:

  • 在定义宏名字的时候,宏的名字中不能有空格,但是在替代字符串中可以使用空格。ANSIC允许在参数列表中使用空格。由于有些编译器要求宏定义在一行中,而宏函数较长,可以在行末回车符前用‘\’[2]连接下一行。
   #define SQR(a) \
   ((a)*(a))
  • 每个参数和宏的整体定义加圆括号,确保宏展开后仍然正确。
    #define SQR(a) ((a)*(a))

    b = SQR(m + 2);
  • 大写字母表示宏函数名。由于使用带参数的宏可能出现问题,因此将宏函数大写可以提醒我们使用它们有可能带来的错误。

  • 使用宏函数不需要检查变量类型,对于实现简单功能的函数较为方便。

    #define SQR(X) ((X)*(X))
    
    int a = 3;
    int b = SQR(a);
    float c = 2.3;
    float d = SQR(c);

  1. 内联函数由编译器确定是否进行内联,且需要进行变量类型检查

  2. 宏定义中的换行连接符号

相关文章

  • 精解C语言预处理命令(三)之“宏”的用法二

    关于C语言带参数的宏定义中的参数 C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实...

  • 带参数的宏

    带参数的宏 在某些情况下,使用带参数的宏可以在程序预处理阶段生成内联代码[1],避免由于函数调用带来的额外开销。而...

  • 2018-05-31

    预处理命令: 宏 不带参数的的宏定义 不是c语句 PI宏展开宏明 可以层层置换 简单的字符串替换 带参数的宏 不是...

  • C语言预处理命令的使用

    预处理命令 定义和使用宏 没有参数的宏 输出如下: 带参数的宏 输出和上一节相同。 可选参数 使用省略号...表示...

  • 5月31

    今天学习了宏定义 宏定义分为:不带参数的宏定义和带参数的宏定义,不占用任何内存空间,宏定义时不加分号。 #defi...

  • Day12

    预处理指令 宏定义 基本格式 不带参数的宏定义 带参数的宏定义 宏定义的作用域 条件编译 基本格式 应用场景用来替...

  • C语言:认识带参数宏

    认识带参数宏 定义 性质 优缺点 带参数宏实例 例1 模拟函数:求两个数中的最大者 输出: 例2 模拟函数:判断一...

  • 王道程序员求职宝典(八)c预处理器,作用域,static,con

    c预处理器,作用域,static,const及内存管理 c预处理器宏定义及宏替换符号常量带参数参数注意带括号文件包...

  • 2018-11-07 宏定义提高可读性

    使用宏定义封装判断条件和读写函数,使代码可读性提高不少。带参数的宏定义,参数只能全词匹配。 明天继续函数和宏定义封装。

  • C语言day10-06带参数的宏定义

    pragma mark 带参数的宏定义 pragma mark 概念 pragma mark 代码

网友评论

      本文标题:带参数的宏

      本文链接:https://www.haomeiwen.com/subject/csloeqtx.html