1
我想知道如果两者都是相同的东西?Objective-C中的“函数”和“宏”是否有区别?
我想知道如果两者都是相同的东西?Objective-C中的“函数”和“宏”是否有区别?
他们不是一回事。 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()我当你预计它只被调用一次时,实际上调用了两次。