Question

Voici une application C ++ très simple que j'ai réalisée avec QtCreator:

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    if (a < 1 or b > 3)
    {
       return 1;
    }
    return 0;
}

Pour moi, ce n'est pas un C ++ valide, car le mot clé ou n'est pas un mot clé réservé.

Mais si je le compile et l’exécute, cela fonctionne sans aucun avertissement! Le code de sortie est 0 et si je change b = 4, le code de sortie est 1!

Je n'inclus rien pour m'assurer qu'il n'y a pas de définition cachée.

C'est vraiment étrange pour moi. Est-ce quelque chose que Qt définit? Je n'ai rien trouvé dans la documentation à ce sujet.

Était-ce utile?

La solution

Selon Wikipedia :

  

C ++ définit des mots-clés pour agir comme des alias   pour un nombre de symboles qui fonctionnent   en tant qu'opérateurs: et (& amp; & amp;), bitand (& amp;),   and_eq (& amp; =), ou (||), bitor (|), ou_eq   (| =), xor (^), xor_eq (^ =), pas (!),   not_eq (! =), compl (~).

As MadKeithV pointe le doigt sur , ces remplacements provenaient de l'iso646.h de C et étaient inclus dans ISO C ++ en tant que mots-clés d'opérateur. L'article de Wikipedia sur iso646.h indique que ces mots clés étaient en fait destinés aux claviers internationaux et autres claviers non QWERTY qui n'auraient peut-être pas eu facilement accès aux symboles.

Autres conseils

ou est un mot clé C ++ et vous êtes autorisé à l'utiliser au lieu de || . Il n'y a pas de magie.

Il en va de même pour et et la plupart des autres opérateurs logiques. Il est généralement préférable de s'en tenir aux noms couramment connus pour éviter toute confusion de ce genre. Si vous utilisez ou , quelqu'un se demandera "pourquoi cela est-il compilé" ;)

iso646.h définit un certain nombre d'opérateurs alternatifs - cela fait partie de la norme C ++. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top