这样做和这样做有什么区别呢?
在什么情况下应该使用一个而不是另一个?
#define NUMBER 10
并且
float number = 10;
在什么情况下应该使用一个而不是另一个?
#define NUMBER 10
并且
float number = 10;
#define NUMBER 10
将创建一个字符串替换,该替换将由预处理器执行(即在编译期间执行)。
float number = 10;
这会在您的二进制数据段中创建一个浮点数,并将其初始化为10。也就是说,它将具有地址并且可变。
因此,编写以下代码:
float a = NUMBER;
这将等同于编写
float a = 10;
相比之下,撰写
float a = number;
将创建一个内存访问。
#define
形式会在编译前的预处理阶段在您的代码中创建替换。由于#define
不像变量number
一样,您的定义在编译时已经被硬编码到可执行文件中。如果您要表示的东西是一个真正的常数,在运行时不需要计算或从某个地方读取,并且在运行时不会更改,则这是可取的。
#define
非常有用,可以使您的代码更易读。假设您正在进行物理计算--而不仅仅是将0.98f放入您需要使用重力加速度常数的每个代码中,您只需在一个地方定义它即可增加代码的可读性:#define GRAV_CONSTANT 0.98f
...
float finalVelocity = beginVelocity + GRAV_CONSTANT * time;
编辑
回来后很惊讶看到我的答案,发现我没有提到为什么不应该使用#define
。
通常情况下,您应避免使用#define
并使用实际类型的常量,因为#define
没有作用域,而类型对IDE和编译器都有好处。
另请参阅此问题和已接受的答案:如何在Objective-C中创建常量?
#Define
是一个预处理器宏,它在程序启动之前运行,并且对整个程序有效。"Float
是在程序/块内定义的数据类型,仅在程序/块内有效。"
float a = 10;
(或其他变量)放在头文件中很可能会导致链接时出现重复符号错误。但使用#define
则不会出错。 - trojanfoe