#define div_ac_power(y,x) *y/x
你应该成为一个地址吗?据我所知,它返回指针(y)和任何对象是x之间的除法结果。
答案 0 :(得分:3)
据我所知,它返回指针(y)和任何对象为x之间的除法结果。
这可能就是故意。
宏需要更多括号以防止滥用。
考虑以下情况:
案例1.复合参数:
result= div_ac_power(y,a+b);
扩展为:
result = *y/a+b; // This equals (*y/a)+b because of operator precedence.
案例2.鬼混:
result= a div_ac_power(y,b); // Note the lack of operator between a and macro
扩展为:
result= a*y/b; // This may well be a valid expression depending on the types of a, b, y.
要修复它,您可以添加括号:
#define div_ac_power(y,x) (*(y)/(x))
答案 1 :(得分:0)
y
指针x
值同样:
int *y, x; // init them
int z = *y;
int res = z / x;