Eliminer warning: comparison of unsigned expression >= 0 is always true

laudemalaudema Membre
juin 2011 modifié dans Objective-C, Swift, C, C++ #1
Bonjour,
    Comment se débarrasser de cet encombrant warning: comparison of unsigned expression >= 0 is always true
Il apparaà®t dans Xcode 4 (en fait je n'ai pas essayé avec le 3) et le code d'Apple ImageKitDemo ce qui est d'autant plus frustrant !
<br /> NSRange r = [aKeyword rangeOfString:search options:NSCaseInsensitiveSearch];<br /> return (r.length&gt;0 &amp;&amp; r.location&gt;=0);<br />

De fait je ne vois pas trop comment triturer le code pour éviter ça ?

(En espérant que "Trucs et astuces" est le bon endroit pour poser la question)

Réponses

  • tabliertablier Membre
    juin 2011 modifié #2
    essaye ainsi:
    NSRange r = [aKeyword rangeOfString:search options:NSCaseInsensitiveSearch];
    return (r.location != NSNotFound);
    J'ai souvent ce message quand je passe des anciens codes sous 10.6. C'est très souvent un problème entre int et NSInteger, ou Uint et NSUInteger.
  • laudemalaudema Membre
    11:45 modifié #3
    dans 1308591463:

    C'est très souvent un problème entre int et NSInteger, ou Uint et NSUInteger.

    Souvent oui alors je fais un "cast" et ça passe, mais là  non, c'est pour prévenir que un NSUinteger sera toujours supérieur ou égal à  zéro.
    Du coup je l'ai casté aussi et ça passe.
    Merci
    "De la discussion jaillit la lumière"  ;)
  • DrakenDraken Membre
    11:45 modifié #4
    "Les Ténèbres ne sont que l'absence de la Lumière !"

  • cyranocyrano Membre
    11:45 modifié #5
    <br /><br />typedef struct _NSRange <br />{<br />&nbsp; NSUInteger location;<br />&nbsp; NSUInteger length;<br />} NSRange;<br /><br />return (r.length&gt;0 &amp;&amp; r.location&gt;=0);<br /><br />
    


    r.location>=0 est tjrs vrai == WARNING

    il faut donc ecrire

    return (r.length&gt;0);
    


  • laudemalaudema Membre
    11:45 modifié #6
    dans 1308643374:


    il faut donc ecrire

    return (r.length&gt;0);
    


    Et pourtant c'est du code Apple.
    Mais finalement je ne sais pas ce qui vaut le mieux: si je fais un "cast" en NSInteger de mon `NSUInteger et que celui ci  est NSNotFound qui correspond lui à 
    enum {NSNotFound = NSIntegerMax};
    
    donc -1 repassé en entier signé, ce qui serait très bien et peut être ce qu'ils avaient voulu mettre, pour le cas (improbable) ou length serait > 0 quand location serait à  NSNotFound (ceinture et bretelles) ?
  • cyranocyrano Membre
    11:45 modifié #7
    d'apres la doc

    rangeOfString:options:

    Return Value
    An NSRange structure giving the location and length in the receiver of the first occurrence of aString, modulo the options in mask. Returns {NSNotFound, 0} if aString is not found or is empty (@";").

    donc aucun cast

    return (r.location != NSNotFound && r.length>0); // r.lenght>0 utile dans le cas (@";").





  • laudemalaudema Membre
    11:45 modifié #8
    dans 1308666833:

    donc aucun cast

    Yep 
Connectez-vous ou Inscrivez-vous pour répondre.