Каково значение #define в цели C? - PullRequest
5 голосов
/ 30 июля 2010

Я хочу задать вопрос об объективе-C или может быть языком C . Я хочу спросить, что означает следующий код #define? Это как объявить переменную?

#define kMountainNameString         @"name"
#define kMountainHeightString           @"height"
#define kMountainClimbedDateString      @"climbedDate"

Ответы [ 4 ]

14 голосов
/ 30 июля 2010

Это простой текстовый макрос замещения.Работает так же, как в C, C ++.

Там, где появляется kMountainNameString, компилятор "вставит" в "@" name "Технически говоря, это происходит перед компилятором с помощью механизма, называемого препроцессором.

5 голосов
/ 30 июля 2010

#define - это директива препроцессора, унаследованная от C, которая принимает форму

#define identifier value

В общем, она используется, чтобы указать препроцессору заменить все экземпляры identifier в коде на заданныетекст перед передачей его компилятору.Идентификаторы также могут быть определены без значений, которые будут использоваться в качестве флагов компилятора для предотвращения множественных определений одних и тех же переменных или для перехода на детали машины, которые не изменятся во время выполнения.Например, чтобы передать другой код компилятору на основе архитектуры вашего процессора, вы могли бы сделать что-то вроде:

#ifdef INTEL86
//some 32-bit code
#else
//some 64-bit code
#endif

При назначении значений в этих определениях часто рекомендуется заключать в скобки значениечтобы сохранить его как одну единицу, независимо от контекста, в котором он существует.

Например, #define FOO 3 + 7 имеет результат, отличный от #define FOO (3 + 7) в результате следующей строки, из-за порядкаарифметические операции:

a = 3 * FOO

См. эту ссылку для получения более подробной информации о директивах препроцессора в целом или эту ссылку для получения информации, более сфокусированной на цели C.

1 голос
/ 30 июля 2010

Препроцессор заменяет все вхождения kMountainNameString на @ "name" до начала компиляции.

0 голосов
/ 30 июля 2010

# define - это директива препроцессора на языке c и c ++.

Используется для определения макросов препроцессора для текстов. #Define используется для подстановки всего файла, в котором он находится.

#define <macro-name> <replacement-string>
...