7

可能重复:
C 中的“static const”与“#define”

在 Objective-C 中,以下两行有什么区别:

#define myInteger 5

static const NSInteger myInteger = 5;

假设它们位于实现指令上方的 MyClass.m 中。

4

4 回答 4

16
#define myInteger 5

是一个预处理器宏。预处理器将在编译器启动之前替换每次出现的myIntegerwith 。5它不是一个变量,它只是一种自动查找和替换机制。

static const NSInteger myInteger = 5;

这是一个恒定的“真实”变量(声明后无法更改)。静态意味着它将成为对该块的多次调用的共享变量。

于 2012-10-20T17:15:37.903 回答
2

使用#define 时,标识符在代码转换为二进制之前由编译器替换为指定的值。这意味着编译器会在您编译应用程序时进行替换。

当您使用 const 并且应用程序运行时,将为常量分配内存,并在运行应用程序时替换该值。

请参考此链接:- static const 和#define 之间的区别

于 2012-10-20T17:15:42.977 回答
2

有以下区别:

  1. 定义是文本替换:

    • 定义是在编译之前进行的预处理器文本替换。当您在每次定义中以文本替换 5 时,您将获得相同的效果。
  2. static const 是内存中的一个变量

    • 然而,静态 const 是驻留在程序内存中的 NSInteger 类型的实例。您不能在运行时更改它,但它是存在于内存中的值,并且它自己的地址作为变量。
于 2012-10-20T17:18:57.727 回答
1

#define myInteger 5是一个声明常量的宏。

因此,无论您使用myInteger宏,它都会被预处理器引擎替换为 5。

const NSInteger myInteger = 5;声明一个变量 myInteger,它的值是 5。

但是它们的用法是一样的,那就是它们是可以用来防止硬编码的常量。

于 2012-10-20T17:14:24.803 回答