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++)); 

     

  • 相关阅读:
    Missing Number
    python乱码,讲得比较好,
    公司搬家,拿了个费机器,没root密码,又忘了怎么搞了,
    mylyn
    eclipse shortcut binding
    jdk8 eclipse luna market crashed
    openjdk
    download plugin update site for offline installation
    armstrong's programming erlang 2nd
    sdf SimpleDateFormat 不是线程安全的,
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8516801.html
Copyright © 2011-2022 走看看