当前位置:  开发笔记 > IOS > 正文

Objective-C中的"功能"和"宏"之间有区别吗?

如何解决《Objective-C中的"功能"和"宏"之间有区别吗?》经验,为你挑选了1个好方法。

我想知道两者是否是同一个东西?



1> Jason Coco..:

它们不是同一件事.C或Objective-C中的函数是将一些过程代码组织到一个单元中.它具有非常特定的语义,您可以在任何基本的C书中阅读它们,并在更高级的书籍中提供更多高级信息.

另一方面,宏在编译的预处理阶段期间创建,而不是实际二进制文件的单独部分.使用宏,宏在复杂发生之前实际上被代码替换,以便在使用宏的任何地方注入副本.这就是为什么在使用宏时需要考虑副作用的原因(因为如果宏多次使用相同的参数,副作用将不止一次发生).

这是一个说明宏的简单示例:

#define SHOW_STRING_TWICE(string)  printf("%s\n%s\n", string, string)

// ...

SHOW_STRING_TWICE("Hello, macro!");

在预处理期间,宏被扩展为此代码:

printf("%s\n%s\n", "Hello, macro!", "Hello, macro!");

您可以在此代码中看到副作用是一个问题:

#define DOUBLE_NUMBER(number) ((number) + (number))

// ...

int doubleRandom = DOUBLE_NUMBER(generate_random_number());

在这种情况下,当宏被扩展时,generate_random_number()实际上被调用了两次,当你预期它只被调用一次时.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有