可可:在代码中被#define搞糊涂了?

时间:2009-05-24 16:34:03

标签: objective-c arrays cocoa-touch c-preprocessor

我正在浏览一些我从互联网上下载的代码(Got it here

我对这行代码感到困惑......究竟是做什么的?

#define N_RANDOM_WORDS (sizeof(randomWords)/sizeof(NSString *))

这是“randomWords”数组:

static NSString *randomWords[] = {
@"Hello",
@"World",
@"Some",
@"Random",
@"Words",
@"Blarg",
@"Poop",
@"Something",
@"Zoom zoom",
@"Beeeep",
};

2 个答案:

答案 0 :(得分:5)

sizeof(randomWords)给出数组占用的字节数。数组的每个元素都是NSString指针。 sizeof(NSString*)给出每个指针的大小。因此,将总大小除以每个元素的大小给出了元素的数量。

N_RANDOM_WORDS是一个定义的宏。无论在何处使用,表达式sizeof(randomWords)/sizeof(NSString*)都将由预处理器插入其位置。这通常是在C或Objective C中定义常量的方式。

有关C(和目标C)中的宏的更多信息,请here's a nice tutorial

答案 1 :(得分:1)

一个NSString*占用sizeof(NSString*)个字节。 randomWords的尺寸为N * sizeof(NSString)。因此,求解N,您得到N = sizeof(randomWords)/sizeof(NSString *)