Как я могу избавиться от предупреждения "неиспользуемая переменная" в Xcode?


Я точно понимаю, почему возникают неиспользуемые переменные предупреждения. Я не хочу подавлять их вообще, потому что они невероятно полезны в большинстве случаев. Однако рассмотрим следующий (надуманный) код.

NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);

в Xcode сообщает, что saved - это неиспользованная переменная, если конечно это не. Я подозреваю, что это потому что NSAssert1 макрос. Элемент NS_BLOCK_ASSERTIONS макрос не определено, поэтому объективные утверждения C определенно включены.

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

10 86

10 ответов:

Я не уверен, что он все еще поддерживается в новом компиляторе LLVM, но GCC имеет" неиспользуемый " атрибут, который можно использовать для подавления этого предупреждения:

BOOL saved __attribute__((unused)) = [moc save:&error];

альтернативно (в случае, если LLVM не поддерживает выше), вы можете разделить объявление переменной на отдельную строку, гарантируя, что переменная будет "использоваться" независимо от того, расширяется ли макрос или нет:

BOOL saved = NO;
saved = [moc save:&error];

С помощью Xcode 4.3.2 и узнал, что это, кажется, работает (меньше писать)

BOOL saved __unused;

в Xcode вы можете установить предупреждения для "неиспользуемые переменные."Перейдите в" настройки сборки "для цели и фильтра со словом "неиспользуемый"

вот скриншот: Builld Settings Screenshot

Я предлагаю вам только изменить его для отладки. Таким образом, вы ничего не пропустите в своей версии релиза.

NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
#pragma unused(saved)

попробуйте вот так. Это работает на меня. Это сработает и для вас тоже.

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

BOOL saved = ...;
(void)saved; // now used

вы можете быть довольны уже описанными расширениями, специфичными для компилятора.

попробуйте использовать: _ _ неиспользуемый атрибут. Работает в Xcode 5

вы можете установить "нет" LLVM compliler 2.0 предупреждение на "релиз" enter image description here

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
    NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop

источник

это то, как вы делаете это в C и, следовательно, также объективно-C.

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

(void)[moc save:&error];

EDIT: компиляторы игнорируют приведения к void, Так что это не должно влиять на производительность – это просто хороший чистый человек аннотация.

заставьте его занять две строки. Разделите объявление и значение по умолчанию

BOOL enabled = NO;

// ...

BOOL enabled;

enabled = NO;