Lin*_*sey 3 constants objective-c c-preprocessor
在我的程序中,我在顶部有一个#define MAXIMUM_SCALE 10
唯一一次使用此常量的是此段代码:
float newScale = [scrollView zoomScale] * ZOOM_STEP;
NSLog(@"%f", newScale);
NSLog(@"lol %f", MAXIMUM_SCALE);
if( [scrollView zoomScale] < MAXIMUM_SCALE){
[self handleZoomWith:newScale andZoomType: TRUE];
}
Run Code Online (Sandbox Code Playgroud)
一些如何,NSLog打印出MAXIMUM_SCALE与newScale相同
即(1.500000 lol 1.500000 2.250000 lol 2.250000)
为什么会这样?
使用时#define MAXIMUM_SCALE 10,您定义的是整数常量,而不是浮点数.我猜你的代码是为x86-64编译的.在该体系结构中,浮点和整数变量通过不同类型的寄存器传递.由于第二次调用NSLog不使用任何浮点参数,因此前一次调用的值仍将位于用于检索值的寄存器中,这意味着您每次都会从上一次调用中获取值.您应该在第二个时收到编译器警告,NSLog告诉您参数与传递的格式不匹配.您可以通过告诉编译器MAXIMUM_SCALE应该是浮点来解决此问题.
#define MAXIMUM_SCALE 10.0f
Run Code Online (Sandbox Code Playgroud)
小数告诉编译器你想要一个浮点数而不是一个整数,并f告诉编译器使用该float类型而不是double.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |