Как я могу избавиться от предупреждения "неиспользуемая переменная" в Xcode?
Я точно понимаю, почему возникают неиспользуемые переменные предупреждения. Я не хочу подавлять их вообще, потому что они невероятно полезны в большинстве случаев. Однако рассмотрим следующий (надуманный) код.
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
в Xcode сообщает, что saved
- это неиспользованная переменная, если конечно это не. Я подозреваю, что это потому что NSAssert1
макрос. Элемент NS_BLOCK_ASSERTIONS
макрос не определено, поэтому объективные утверждения C определенно включены.
пока это не я нахожу это неопрятным и раздражающим, и я хочу подавить это, но я не уверен, как это сделать. Присвоение переменной себе избавляет от предупреждения компилятора, но я бы предпочел сделать это "правильным" способом, если такая вещь существует.
10 ответов:
Я не уверен, что он все еще поддерживается в новом компиляторе LLVM, но GCC имеет" неиспользуемый " атрибут, который можно использовать для подавления этого предупреждения:
BOOL saved __attribute__((unused)) = [moc save:&error];
альтернативно (в случае, если LLVM не поддерживает выше), вы можете разделить объявление переменной на отдельную строку, гарантируя, что переменная будет "использоваться" независимо от того, расширяется ли макрос или нет:
BOOL saved = NO; saved = [moc save:&error];
в Xcode вы можете установить предупреждения для "неиспользуемые переменные."Перейдите в" настройки сборки "для цели и фильтра со словом "неиспользуемый"
вот скриншот:
Я предлагаю вам только изменить его для отладки. Таким образом, вы ничего не пропустите в своей версии релиза.
NSError *error = nil; BOOL saved = [moc save:&error]; NSAssert1(saved, @"Dude!!1! %@!!!", error); #pragma unused(saved)
попробуйте вот так. Это работает на меня. Это сработает и для вас тоже.
единственный простой и портативный способ пометить переменную как используется... чтобы использовать его.
BOOL saved = ...; (void)saved; // now used
вы можете быть довольны уже описанными расширениями, специфичными для компилятора.
#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
, Так что это не должно влиять на производительность – это просто хороший чистый человек аннотация.