展开全部
C语言中的宏,在编译时,进行简单替换。
也就是说
当你算B*B时
编译器会把它变为A*A*A*A
3+2*3+2*3+2*3+2 = 23
因为你没有写括号也就是
#define A (3+2)
所以不是你预想的
(3+2)*(3+2)*(3+2)*(3+2)
所以说宏是简单替换,不会帮你把运算优先级也编译出来。
这个是一个常见的宏问题。
也就是说
当你算B*B时
编译器会把它变为A*A*A*A
3+2*3+2*3+2*3+2 = 23
因为你没有写括号也就是
#define A (3+2)
所以不是你预想的
(3+2)*(3+2)*(3+2)*(3+2)
所以说宏是简单替换,不会帮你把运算优先级也编译出来。
这个是一个常见的宏问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏只是简单的文本替换
B等价于
3 + 2 * 3 + 2
B*B等价于
3 + 2 * 3 + 2 * 3 + 2 * 3 + 2
B等价于
3 + 2 * 3 + 2
B*B等价于
3 + 2 * 3 + 2 * 3 + 2 * 3 + 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
3+2*3+2*3+2*3+2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询