程序的结果,自己用编辑器测试一下就知道结果了。
分析:
计算时,是将参数整体代入宏变量中,然后展开计算。
即
TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))
变为
TOUPPER(s[++i]) ('a'<=(s[++i])&&(s[++i])<='z'?(s[++i])-'a'+'A':(s[++i]))
先计算
'a'<=(s[++i])成立,此时i为1,
再计算
s[++i])<='z'成立,此时i为2,
由于同时成立,所以执行
(s[++i])-'a'+'A',此时i自增为3,即s[3]='d'
代入计算后,'d'-'a'+'A'='D'
如有帮助,望点击【本回答采纳】支持一下。
putchar(TOUPPER(s[++i]));
宏展开的结果是:
putchar(('a'<=(s[++i])&&(s[++i])<='z'?(s[++i])-'a'+'A':(s[++i])) );
到输出时,引用了三次s[++i]
所以,就是输出D
题主没有搞清楚宏定义的本质
宏定义的本质是字符替换
也就是putchar()里面其实使用了3次的s[++i]
而s[++i]每次被用到,i都会累加,最后变成i=3
D选项是 'B' 吗