问:编译并运行如下代码,符合预期吗?
#include <stdio.h>
#include <stdint.h>
#define TIMES(a, b) a*b
int main(int argc, char* argv[])
{
printf("%d\r\n", TIMES(1 + 1, 2 + 2));
return 0;
}
答:不符合预期,执行命令输出:5。
问:不符合预期的原因是什么?
答:宏定义编译时展开,TIMES(1 + 1, 2 + 2)展开后是1 + 1 * 2 + 2。
问:如何解决这种问题?
答:添加(),每个参数和最终的组合两边都加,修改后代码如下:
#include <stdio.h>
#include <stdint.h>
#define TIMES(a, b) ((a)*(b))
int main(int argc, char* argv[])
{
printf("%d\r\n", TIMES(1 + 1, 2 + 2));
return 0;
}