这个宏意味着什么#define div_ac_power(y,x)* y / x

时间:2015-06-11 12:03:41

标签: c

#define div_ac_power(y,x)           *y/x

你应该成为一个地址吗?据我所知,它返回指针(y)和任何对象是x之间的除法结果。

2 个答案:

答案 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)

  1. 取消引用y指针
  2. 指向的值
  3. 将此值除以x
  4. 同样:

    int *y, x; // init them
    int z = *y;
    int res = z / x;