Какао: Смущен #define в коде? - PullRequest
1 голос
/ 24 мая 2009

Я просматривал какой-то код, который я скачал из интернета ( Получил его здесь )

Я запутался в этой строке кода ... Что именно она делает?

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

Вот массив «randomWords»:

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

Ответы [ 2 ]

5 голосов
/ 24 мая 2009

sizeof(randomWords) дает количество байтов, занятых массивом. Каждый элемент массива является указателем NSString. sizeof(NSString*) дает размер каждого указателя. Таким образом, деление общего размера на размер каждого элемента дает количество элементов.

N_RANDOM_WORDS - это определяемый макрос. Где бы он ни использовался, препроцессор вставит на его место выражение sizeof(randomWords)/sizeof(NSString*). Обычно так определяют константы в C или Objective C.

Для получения дополнительной информации о макросах в C (и Objective C), вот хороший учебник .

1 голос
/ 24 мая 2009

Один NSString* занимает sizeof(NSString*) байтов. Размер randomWords составляет N * sizeof(NSString). Таким образом, решая за N, вы получаете N = sizeof(randomWords)/sizeof(NSString *).

...