2016-12-05 5 views
1

У меня есть проект с некоторыми макросами, которые определены с помощью инструкций Objective-C, как это:Objective-C макросу в препроцессоре IF

#define TEST [someObject someNumber] == 500 

мне нужно определить другое значение на основе этого результата, как это:

#if TEST 
    #define THING = 1 
#else 
    #define THING = 2 
#endif 

Но это не работает. И я не могу использовать #ifdef TEST, потому что значение всегда определено. Даже если это false, оно все еще определено.

TEST основан на инструкции ObjC, и, похоже, препроцессор не имеет возможности оценить его. Итак, нет ли способа проверить это?

+0

Может ли препроцессор знать значение '[someObject someNumber]' во время выполнения? – Willeke

+0

Может ли препроцессор узнать значение [someObject someNumber] во время сборки? – Vincent

+0

Может быть. Когда запускается запуск, он должен знать значение. Если да, то как я узнаю? И как я буду использовать его? – ABeard89

ответ

1

В комментариях Вы писали:

Поскольку TEST должен быть оценен во время выполнения, нет никакого способа узнать значение этого во время сборки. Поскольку препроцессор не может знать значение, он не может его проверить. Это верно?

Да.

Препроцессор работает (по крайней мере логически) до остальная часть компилятора. Это, по сути, язык и синтаксис агностик, и даже не имеет доступа к константам, определенным в вашем коде. Условные конструкции работают исключительно с токенами препроцессора.

 Смежные вопросы

  • Нет связанных вопросов^_^