web-dev-qa-db-fra.com

Comment puis-je me débarrasser d'un avertissement de "variable inutilisée" dans Xcode?

Je comprends exactement pourquoi les avertissements de variable inutilisés se produisent. Je ne veux pas les supprimer en général, car ils sont incroyablement utiles dans la plupart des cas. Cependant, considérons le code suivant (artificiel).

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

Xcode rapporte que saved est une variable non utilisée, bien sûr. Je suppose que c'est parce que NSAssert1 est une macro. Le NS_BLOCK_ASSERTIONSLa macro est pas définie, les assertions Objective C sont donc définitivement activées.

Bien que cela ne fasse pas mal, je le trouve désordonné et agaçant, et je veux le supprimer, mais je ne sais pas comment faire. L'affectation de la variable à elle-même supprime l'avertissement du compilateur, mais je préférerais le faire de la "bonne" manière si une telle chose existe.

91
Gregory Higley

Je ne sais pas s'il est toujours pris en charge par le nouveau compilateur LLVM, mais GCC a un attribut "inutilisé" que vous pouvez utiliser pour supprimer cet avertissement:

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

Alternativement (dans le cas où LLVM ne prend pas en charge ce qui précède), vous pouvez fractionner la déclaration de variable en une ligne distincte, en garantissant que la variable sera "utilisée", que la macro se développe ou non:

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

Utiliser Xcode 4.3.2 et découvrir que cela semble fonctionner (moins d’écriture)

BOOL saved __unused;
99
JOM

Dans Xcode, vous pouvez définir les avertissements pour "Variables inutilisées". Allez dans "Paramètres de construction" pour la cible et filtrez avec le mot "non utilisé"

Voici une capture d'écran: Builld Settings Screenshot

Je vous suggère de ne changer que pour Debug. De cette façon, vous ne manquerez de rien dans votre version finale.

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

Essayez comme ça. Ça marche pour moi. Cela fonctionnera pour vous aussi.

21
Danny Xu

Le seul moyen simple et portable de marquer une variable comme utilisée est… de l'utiliser.

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

Cependant, vous pouvez être satisfait des extensions spécifiques au compilateur déjà décrites.

14
user3125367

essayez avec: __unused attribut. Fonctionne dans Xcode 5

8
João Nunes
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wunused-variable"
    NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop

SOURCE

8
Alex

Vous pouvez définir "Non" avertissement du module d’installation LLVM 2. à la "libération" enter image description here

4
Ar No

C’est ce que vous faites en C et donc aussi en Objective-C.

Même si les avertissements ne sont pas activés, il est toujours judicieux de marquer la valeur de retour comme explicitement ignorée. Cela montre également aux autres développeurs que vous n'avez pas simplement oublié la valeur de retour - vous avez en effet explicitement choisi de l'ignorer.

(void)[moc save:&error];

EDIT: Les compilateurs ignorent les conversions vers void, donc cela ne devrait pas affecter les performances - c'est juste une annotation humaine propre et agréable.

3
Trenskow

Faites-le prendre deux lignes. Séparer la déclaration et la valeur par défaut

BOOL enabled = NO;

// ...

BOOL enabled;

enabled = NO;
1
0xFADE