我很无能为力,为什么在为宏提供参数时有两个额外的括号有不同的结果.
给出以下宏:
#define DEGREES_TO_RADIANS(degrees) ((M_PI * degrees)/ 180)
Run Code Online (Sandbox Code Playgroud)
为什么以下代码:
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)));
Run Code Online (Sandbox Code Playgroud)
有不同的结果:
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
Run Code Online (Sandbox Code Playgroud)
测试1和3是正确的.但为什么'测试2'有错误的答案,打败我.也许其中一位大师可以对此有所了解.
谢谢!
因为M_PI * 160.0 - 90.0!=M_PI * (160.0-90.0)
这正是强烈建议用括号编写宏的原因:
#define DEGREES_TO_RADIANS(degrees) ((M_PI * (degrees))/ 180)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |