Как я могу избавиться от предупреждения "неиспользуемой переменной" в Xcode?
Я точно понимаю, почему возникают неиспользуемые предупреждения переменных. Я не хочу их подавлять в целом, потому что они в большинстве случаев невероятно полезны. Однако рассмотрим следующий (надуманный) код.
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
Xcode сообщает, что saved
- неиспользуемая переменная, когда, конечно, это не так. Я подозреваю, что это потому, что NSAssert1
- это макрос. Макрос NS_BLOCK_ASSERTIONS
не определен, поэтому утверждения Objective C определенно включены.
Хотя это ничего не болит, я нахожу это неопрятным и раздражающим, и я хочу его подавить, но я не знаю, как это сделать. Присвоение переменной самому себе избавляет от предупреждения компилятора, но я предпочел бы сделать это "правильным" способом, если такая вещь существует.
Ответы
Ответ 1
Я не уверен, что он все еще поддерживается в новом компиляторе LLVM, но GCC имеет "неиспользуемый" атрибут, который вы можете использовать для подавления этого предупреждения:
BOOL saved __attribute__((unused)) = [moc save:&error];
В качестве альтернативы (в случае, если LLVM не поддерживает вышеизложенное), вы можете разделить объявление переменной на отдельную строку, гарантируя, что переменная будет "использоваться", будет ли макрос расширяться или нет:
BOOL saved = NO;
saved = [moc save:&error];
Ответ 2
Используя Xcode 4.3.2 и выяснилось, что это работает (меньше написания)
BOOL saved __unused;
Ответ 3
В Xcode вы можете установить предупреждения для "Неиспользуемые переменные". Перейдите в "Настройки сборки" для цели и нажмите "Неиспользуемый"
Вот скриншот: ![Builld Settings Screenshot]()
Я предлагаю вам только изменить его для Debug. Таким образом, вы не пропустите ничего в своей версии.
Ответ 4
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
#pragma unused(saved)
Попробуйте это.
Он работает для меня. Он также будет работать для вас.
Ответ 5
Единственный простой и переносимый способ отметить используемую переменную - использовать ее.
BOOL saved = ...;
(void)saved; // now used
Однако вы можете быть довольны уже описанными расширениями, специфичными для компилятора.
Ответ 6
попробуйте использовать: __unused атрибут. Работает в Xcode 5
Ответ 7
Вы можете установить предупреждение "Нет" LLVM compliler 2.0 на "Release" ![enter image description here]()
Ответ 8
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop
ИСТОЧНИК
Ответ 9
Так вы делаете это в C и, следовательно, также Objective-C.
Даже если у вас нет предупреждений, всегда полезно отметить возвращаемое значение, которое явно игнорируется. Это также показывает другим разработчикам, что вы не просто забыли о возвращаемом значении - вы действительно явно решили проигнорировать его.
(void)[moc save:&error];
EDIT: компиляторы игнорируют отбрасывания до void
, поэтому он не должен влиять на производительность - это просто хорошая аннотация для человека.
Ответ 10
Сделайте две линии. Разделите объявление и значение по умолчанию
BOOL enabled = NO;
// ...
BOOL enabled;
enabled = NO;
Ответ 11
Если вы хотите подавить все предупреждения в Xcode, это можно сделать следующим образом
перейти к настройкам target- > build → Swift Compiler - Warnings Policies → подавить предупреждения → YES