Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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