可可:在代码中被#define困惑了?

1 arrays cocoa-touch objective-c c-preprocessor

我正在浏览一些我从网上下载的代码(在这里得到)

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

#define N_RANDOM_WORDS (sizeof(randomWords)/sizeof(NSString *))
Run Code Online (Sandbox Code Playgroud)

这是"randomWords"的数组:

static NSString *randomWords[] = {
@"Hello",
@"World",
@"Some",
@"Random",
@"Words",
@"Blarg",
@"Poop",
@"Something",
@"Zoom zoom",
@"Beeeep",
};
Run Code Online (Sandbox Code Playgroud)

Jay*_*rod 5

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

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

有关C(和Objective C)中的宏的更多信息,这是一个很好的教程.