Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino : Test direct sur fonction impossible ?

Ceci ne fonctionne pas : if (ma_fonction()=false) {} ?

    20 juillet 2018 à 18:12:07

    Ouaf! nombre de caractère limité dans le titre du sujet ... pas simple de synthétiser.

    Bonjour à tous. je débute en C++ Arduino et je me suis laissé embarqué comme en programmation avec d'autres IDE avec une fonction simple renvoyant un booleen en résultat :

    bool StartSecurityTest()
    
    {ma prog avec return=false ou true} 
    Puis, j'ai voulu faire un test direct lors de l'appel de la fonction (comme d'hab dans d'autres langages) :
    if (StartSecurityTest()=false) {je fais ce que je veux ici};

    et ça ne fonctionne pas, il a fallu que je passe par une variable intermédiaire :

    bool sst;
    
    sst=StartSecurityTest();
    if (sst=false) {je fait ce que je veux ici}
    
    
    Heuuu, on ne peux donc pas utiliser une fonction en argument ? on est obligé de passer par des variables intermédiaires ? ou alors j'ai loupé un truc ? ou il y a plus simple et mieux ?

    Merci à tous

    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2018 à 18:37:03

      Bonjour,

      En C/C++, l'opérateur d'égalité est ==, pas = qui ne fait que l'affectation (et renvoie la valeur affectée, ce qui permet à ta 2e méthode de compiler, sans être pour autant correcte).

      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2018 à 20:13:21

        Le simple signe = est une affectation et non une comparaison.

        De plus, l'affection est prioritaire sur le test du if.

        Au final, écrire ce code :

        if ( a = false ) {
            // ...
        }

        Revient à avoir exactement la même chose que ça :

        a = false;
        if ( a ) {
            // ...
        }
        

        Et comme une comparaison d'une variable unique se fait par rapport à 0, cela revient à avoir ceci :

        a = false;
        if ( a != 0 ) {
            // ...
        }

        Du coup, ton programme ne rentre jamais dans le if...

        ----------

        Bien évidement, une affectation ne peut pas se faire sur le retour d'une fonction, d'où l'erreur de compilation.

        Dans ton cas, c'est un opérateur de comparaison avec 2 signes égals qu'il te faut utiliser.

        if( StartSecurityTest() == false ) {
            // ...
        }






        -
        Edité par lorrio 20 juillet 2018 à 20:14:03

        • Partager sur Facebook
        • Partager sur Twitter
          21 juillet 2018 à 7:59:40

          Effectivement! j'avais oublié l'utilisation du ==

          Je suis déjà un peu dérouté par la précision syntaxique demandée par l'IDE (car sensible à la casse) que j'en oublie quelques principes de base!

          Merci à vous 2 en tout cas.

          • Partager sur Facebook
          • Partager sur Twitter

          Arduino : Test direct sur fonction impossible ?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown