以下宏
的数学等价方程是什么?#define SQ(a) (a*a )
int answer SQ(2 + 3 );
此案例的输出为11 和
int answer SQ(2 + 4);
是14我无法从输出中找出等式。
答案 0 :(得分:1)
您定义的宏缺少括号以保持算术正常工作。请记住,预处理器宏只是单独进行文本替换。因此,当您展示时,通过调用它可以获得的内容扩展为
int answer (2 + 4 * 2 + 4);
并且根据运算符优先级,结果为14
。
将您的宏写为
#define SQ(a) ((a)*(a))
获得您期望的结果。
答案 1 :(得分:1)
SQ(2 + 4)扩展为2 + 4 * 2 + 4 = 14,因为您的宏中没有使用括号。这对于新手来说是一个普遍的宏观陷阱,因为宏在这方面并不十分安全,因为它们只是由预处理器作为原始字符串处理。
你应该写这样的东西:
#define SQ(a) ((a)*(a))
并且将扩展为:(2 + 4)*(2 + 4)= 36。
同样的逻辑成立如果你用4替换4,你将得到11,并使用更正后的宏25。
话虽如此,你真的不应该初始化这样的整数。一般方法是使用显式赋值。