zoukankan      html  css  js  c++  java
  • 关于宏定义中参数问题

    很多情况下,为了整个程序的方便,我们会使用宏定义,但在宏定义中有很多细节。宏定义只是单纯的进行文本替换,在编译前就已经替换完成,不做表达式计算。

    (1)宏名一般用大写 (主要是为了和变量区分,没有硬性要求)

    (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义

    (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

    (4)宏定义末尾不加分号;(如果加了分号,则会连分号一起替换)

    (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。

    (6)可以用#undef命令终止宏定义的作用域

    (7)宏定义允许嵌套 (宏定义允许使用已经定义的宏定义)

    (8)字符串( " " )中永远不包含宏

    (9)宏定义不分配内存,变量定义分配内存。

    (10)宏定义不存在类型问题,它的参数也是无类型的。

    还有一种带参数的宏定义。不仅有替换,还有实参替换形参的过程。

    (1)要注意参数要加括号,因为不进行表达式计算,不加括号很有可能出现计算先后的错误

    (2)带参数宏定义中,宏名与形参表之间不允许有空格。 #define MAX(a,b) (a>b)?a:b

    (3)要注意带参数宏和带参数的函数的区别。比如

    main()


      int i=1; 
      while(i<=5) 
        printf("%d ",SQ(i++)); 

    SQ(int y) 

      return((y)*(y)); 
    }

    ******************************************************************************

    #define SQ(y) ((y)*(y)) 
    main(
    )

      int i=1; 

      while(i<=5) 

        printf("%d ",SQ(i++)); 

     

  • 相关阅读:
    8.20 附加赛3
    8.22 附加赛4
    Codeforces Round #505 (Div 1 + Div 2) (A~D)
    8.9 附加赛2
    8.10 正睿暑期集训营 Day7
    8.9 正睿暑期集训营 Day6
    8.8 正睿暑期集训营 Day5
    8.7 正睿暑期集训营 Day4
    8.6 正睿暑期集训营 Day3
    8.5 正睿暑期集训营 Day2
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8516801.html
Copyright © 2011-2022 走看看