• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

宏定义后面为什么要加括号

厉害企鹅 2019-11-28 浏览量:1722
宏定义后面为什么要加括号
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 一种是,为了添加参数

    #define xxx()    xxxxxx


    一种是为了防止运算优先级出错

    #define xxx  (xxx)

    • 发布于 2019-12-11
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 因为#defined的后面两个参数必须用两个空格隔开,如果超过两个空格就需要用括号区分第一个参数和第二个参数
    • 发布于2019-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 不加括号可能会有优先级的问题,因为#define只是替换的作用
    • 发布于2019-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 加括号是确保后面是一个整体,防止IDE识别错误。
    • 发布于2019-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为你没有具体说是什么样的宏定义实例,所以只能泛泛的说一下

    加括号有很多种情况

    1. 是本身如果是宏定义为函数效果,本身就需要用括号来隔开(包裹参数),比如

    #defined Xadd(AB)   (A+B)

    2. 是为了保证宏展开时没有歧义,比如

    #defined XX1(AB)    (A * B)

    #defined XX2(AB)    ((A)*(B))

    因为宏定义是硬展开,如果没有合适的括号,就会用歧义产生,比如调用

    xx1 = XX1( 5+48+3 ) ;

    xx2 = XX2( 5+48+3 ) ;

      展开为(注意宏定义是预处理期间处理的,其实就是字符串操作)

    xx1 =( 5+4 * 8+3 );

    xx2=( (5+4) * (8+3) );

    显然,xx2的展开情况才符合期望。


    • 发布于2019-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果有参数的话,括号里的参数与宏中的参数添加运算

    要是没有参数的,可能就是为了与函数的形式一至才加的

    • 发布于2019-12-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 这是防止使用宏的人不加括号,导致一些运算顺序被改变

    如#define A 1+2

    b=A*A

    那么b就变成了1+2*1+2,这明显与设计目的不符

    • 发布于2019-12-04
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

宏定义后面为什么要加括号