C语言三目运算符宏定义含义及输出结果7的计算疑问
C语言三目运算符与宏定义问题解答
1. 宏定义中b?的含义
这里的b?是C语言三目运算符的组成部分,C语言三目运算符的完整语法为:
条件表达式 ? 表达式1 : 表达式2
执行规则为:
- 若
条件表达式的结果为非0(判定为真),则返回表达式1的计算结果 - 若
条件表达式的结果为0(判定为假),则返回表达式2的计算结果
你给出的宏定义里的b就是三目运算符的条件判断部分,b?就是用来触发上述判断逻辑的语法组成。
2. 程序输出结果为7的计算过程
核心注意点:C语言的宏是纯文本替换逻辑,不会提前计算参数值,也不会自动为参数加括号保护运算优先级,计算过程如下:
第一步:宏展开
调用M(x + y, x - y)时,会将宏定义中的a原样替换为x + y,b原样替换为x - y,展开后的完整表达式为:
(x - y ? (x + y / x - y) : (x + y + x - y))
第二步:按优先级计算表达式
- 先计算三目运算符的条件部分:
x - y = 10 - 3 =7,非0判定为真,执行冒号前的分支x + y / x - y - 分支内按运算优先级计算:除法优先级高于加减,先算
y / x = 3 /10,C语言整数除法向下取整,结果为0 - 再按从左到右顺序计算加减:
10 + 0 -3 =7
最终printf输出结果即为7。
内容的提问来源于stack exchange,提问作者Integrity
相关产品推荐
相关产品推荐

