#Define和Float之间的区别?

时间:2011-03-05 11:50:02

标签: ios objective-c floating-point c-preprocessor

说这样做会有什么区别?

#define NUMBER 10

float number = 10;

在什么情况下我应该使用一个而不是另一个?

3 个答案:

答案 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是在程序/块中定义的数据类型,仅在程序/块中有效。