Директива препроцессора Objective-C для «если нет»

Я понимаю, как использовать директиву препроцессора следующим образом:

#if SOME_VARIABLE
    // Do something
#else
    // Do something else
#endif

Но что, если я хочу сделать что-то только IF NOT SOME_VARIABLE.

Очевидно, я все еще мог бы сделать это:

#if SOME_VARIABLE

#else
    // Do something else
#endif

. . . оставив if пустым, но есть ли способ сделать:

#if not SOME_VARIABLE
   // Do something
#endif

Документация Apple здесь предполагает, что нет, но это похоже на очень основную потребность.

В основном я хочу сделать эквивалент препроцессора:

if(!SOME_VARIABLE)(
{
   // Do Something
}

person Undistraction    schedule 04.06.2012    source источник


Ответы (3)


вы можете попробовать:

#if !(SOME_VARIABLE)
   // Do something
#endif
person CarlJ    schedule 04.06.2012
comment
Я удалил все ссылки на TARGET_IPHONE_SIMULATOR. Это был просто пример. Я просто хочу знать, как сказать ЕСЛИ НЕ в директиве препроцессора. - person Undistraction; 04.06.2012
comment
Имеют ли значение скобки вокруг SOME_VARIABLE? - person Thomas Watson; 05.03.2014

Вы пытаетесь проверить, определено что-то или нет? Если да, вы можете попробовать:

#ifndef SOME_VARIABLE

or

#if !defined(SOME_VARIABLE)

person xuzhe    schedule 04.06.2012
comment
Мой вопрос не имеет никакого отношения к тому, определен он или нет. Просто нужен способ сделать эквивалент if if(!some_var){//do something}; - person Undistraction; 04.06.2012

Документация Apple (Если - Препроцессор C) правильный, и именно так операторы препроцессора C были с незапамятных времен. В соответствии с той же документацией все, что вы можете сделать, это создать выражение, которое оценивается как нулевое или ненулевое значение, и использовать его.

Ответы Meccan верны, поскольку TARGET_IPHONE_SIMULATOR определяется как TRUE или FALSE в зависимости от платформы, поэтому выражение будет оцениваться либо как ноль, либо как ненулевая сумма.

Обычно эти макросы (#if и т. д.) используются для включения или исключения вещей в зависимости от того, определен ли символ или нет. Для этого варианта использования у препроцессора есть #ifdef и #ifndef, которые охватывают то, что исторически считалось наиболее важным.

Также, учитывая, что предметом этих утверждений могут быть только другие символы, определенные препроцессором (через #define), тогда это ограничение разумно.

person Peter M    schedule 04.06.2012