说这样做会有什么区别?
#define NUMBER 10
和
float number = 10;
在什么情况下我应该使用一个而不是另一个?
答案 0 :(得分:14)
#define NUMBER 10
将创建一个由预处理器执行的字符串替换(即在编译期间)。
float number = 10;
将在二进制文件的数据段中创建一个浮点数并将其初始化为10。它会有一个地址并且是可变的。
所以写作
float a = NUMBER;
与写作
相同float a = 10;
写作
float a = number;
将创建一个内存访问。
答案 1 :(得分:4)
正如Philipp所说,#define
表单在编译前的预处理阶段会在代码中创建替换。因为#define
不是像number
这样的变量,所以在编译时你的定义很难融入你的可执行文件中。如果你重复的东西是一个真正的常量,不需要在运行时从某个地方计算或读取,并且在运行时不会改变,那么这是可取的。
#defines
对于使代码更具可读性非常有用。假设您正在进行物理计算 - 而不是只需将0.98f压缩到您需要使用重力加速度常数的代码中,您可以在一个地方定义它并增加代码可读性:
#define GRAV_CONSTANT 0.98f
...
float finalVelocity = beginVelocity + GRAV_CONSTANT * time;
修改强>
很高兴回来找到我的答案,看到我没有提到为什么你不应该使用#define
。
通常,您希望避免#define
并使用实际类型的常量,因为#define
没有范围,并且类型对IDE和编译器都有益。
另请参阅此问题并接受答案:What is the best way to create constants in Objective-C
答案 2 :(得分:0)
“#Define”实际上是一个预处理器宏,它在程序启动之前运行,对整个程序有效
Float是在程序/块中定义的数据类型,仅在程序/块中有效。