1

我一无所知,为什么在为宏提供参数时两个额外的大括号会产生不同的结果。

给定以下宏:

#define   DEGREES_TO_RADIANS(degrees)  ((M_PI * degrees)/ 180)

为什么下面的代码:

NSLog(@"test 1: %f", DEGREES_TO_RADIANS(70.0));
NSLog(@"test 2: %f", DEGREES_TO_RADIANS(160.0-90.0));
NSLog(@"test 3: %f", DEGREES_TO_RADIANS((160.0-90.0)));

有不同的结果:

2012-12-05 00:43:07.177 test[9267:11603] test 1: 1.221730
2012-12-05 00:43:07.179 test[9267:11603] test 2: 2.292527
2012-12-05 00:43:07.180 test[9267:11603] test 3: 1.221730

测试 1 和 3 是正确的。但是为什么“测试 2”有一个错误的答案,打败了我。也许一位大师可以对此有所了解。

谢谢!

4

1 回答 1

5

因为M_PI * 160.0 - 90.0!=M_PI * (160.0-90.0)

这正是为什么强烈建议用括号编写宏的原因:

#define   DEGREES_TO_RADIANS(degrees)  ((M_PI * (degrees))/ 180)
于 2012-12-04T23:53:15.130 回答