C++, petite question de syntaxe
Discussion fermée
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 44

C++, petite question de syntaxe



  1. #1
    Bounoume

    C++, petite question de syntaxe


    ------

    bonjour,
    j'avais l'habitude, il y a longtemps, d'écrire
    int i;
    for(i=0;i<limite;i++)


    sur https://www.learncpp.com/cpp-tutoria...or-statements/ je trouve l'auto-incrémentation écrite
    for(i=0;i<limite;++i)

    est-ce équivalent pour i, simple variable....
    Je crois me souvenir qu'il y avait une affaire d'incrémentation avant ++Valeur, OU après valeur++, mais je ne retrouve plus....

    merci d'avance

    -----
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  2. #2
    Ikhar84
    Animateur Informatique

    Re : C++, petite question de syntaxe

    Code:
    i++
    Est très différent de
    Code:
    ++i
    Dans le premier cas, on "utilise" (lit, compare, etc...) i puis on l'incrémente,
    Dans le deuxième cas, on l'incrémente d'abord, puis on l'utilise...

    La différence se ressentira dans la première et la dernière boucle:

    Code:
    for (int i=0; i < limite; i++) {
        ....
    }
    Dans la première boucle, i vaut 0.

    Code:
    for (int i=0; i < limite; ++i) {
        ...
    }
    Là elle vaut d'entrée de jeu, i est incrémenté avant d'être utilisée par le for...

    Idem pour la dernière boucle...
    J'ai glissé Chef !

  3. #3
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par Ikhar84 Voir le message
    Là elle vaut d'entrée de jeu, i est incrémenté avant d'être utilisée par le for...
    Tu es sur de ça ? J'ai l'impression que dans le cas des boucles, cela ne change rien.

  4. #4
    Ikhar84
    Animateur Informatique

    Re : C++, petite question de syntaxe

    Il semblerait que tu ais raison, si j'en crois cette page, pas trop envie de lancer Visual studio là pour tester, moi j'aurais dis réponse A) à la question, et bien j'ai tort pour le for...

    Edit : Mais c'est vrai qu'on "post-increment" sans se poser de questions sur les for depuis tant de temps...
    La question est vraiment interressante du coup !
    Dernière modification par Ikhar84 ; 07/07/2019 à 18h09.
    J'ai glissé Chef !

  5. A voir en vidéo sur Futura
  6. #5
    LeMulet

    Re : C++, petite question de syntaxe

    i++ ou ++i ça ne change rien.
    D'ailleurs il n'est même pas nécessaire de faire référence à i lorsqu'on construit une boucle for.

    Une boucle for en c n'est pas "typée", dans le sens ou il s'agit d'une construction libre composée de 3 termes quelconques.
    i n'est pas un "compteur de boucle" comme dans d'autres langage.

    Premier terme : Qu'est-ce qu'on fait au début (ne sera exécute qu'une seule fois, et on parle en général d'une variable d'incrément, mais ce n'est pas une nécéssité).
    Deuxième terme : Condition de continuation (on peut faire référence à i ou à tout autre chose)
    Troisième terme : Qu'est-ce qu'on fait après avoir executé le code "inclus" (cad se trouvant un niveau d'imbrication plus bas que la définition de la boucle), si la condition de continuation est vérifiée.(on joue en général sur la "variable de boucle", mais ce n'est pas une nécessité).
    Dernière modification par LeMulet ; 07/07/2019 à 18h45.
    Bonjour, et Merci.

  7. #6
    Merlin95

    Re : C++, petite question de syntaxe

    la différence se voit par exemple dans ce cas.

    i = 2;
    j = 2:

    k = i++;
    l = ++i;

    k vaut dans ce cas 3 et l vaut 2.

    dans ++i, l'instruction est exécuté avant l'incrémentation.
    dans i++, l'instruction est exécuté après l'incrémentation.

    Dans le cas de la boucle for l'instruction est uniquement d'incrémenter, il n'y a rien d'autres à faire donc ca ne change rien d'écrire ++i ou i++.

  8. #7
    jiherve

    Re : C++, petite question de syntaxe

    bonsoir
    en fait, tout dépendra du compilateur comme d'habitude avec les langages "évolués" trop permissifs, amha surprises garanties quelquefois!
    JR
    l'électronique c'est pas du vaudou!

  9. #8
    LeMulet

    Re : C++, petite question de syntaxe

    Pour me répéter (deuxième itération ):

    Citation Envoyé par Wikipedia
    La boucle for des langages C,C++1 ou Java est beaucoup plus générale qu'un simple compteur.


    for (initialisation ; test ; itération) opération;
    https://fr.wikipedia.org/wiki/Boucle_for
    Bonjour, et Merci.

  10. #9
    Merlin95

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    bonsoir
    en fait, tout dépendra du compilateur comme d'habitude avec les langages "évolués" trop permissifs, amha surprises garanties quelquefois!
    JR
    non pas une qestion de compilo, relire mon message et celui de LeMulet.

  11. #10
    Bounoume

    Re : C++, petite question de syntaxe

    Citation Envoyé par Merlin95 Voir le message
    la différence se voit par exemple dans ce cas.

    i = 2;
    j = 2:

    k = i++;
    l = ++i;

    k vaut dans ce cas 3 et l vaut 2.

    dans ++i, l'instruction est exécuté avant l'incrémentation.
    dans i++, l'instruction est exécuté après l'incrémentation.

    Dans le cas de la boucle for l'instruction est uniquement d'incrémenter, il n'y a rien d'autres à faire donc ça ne change rien d'écrire ++i ou i++.
    C'est donc seulement si j'utilisais l'auto-incrémentation dans des affectations (des égalités) que je risquerais d'être piégé....
    merci pour ce rappel...
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  12. #11
    Merlin95

    Re : C++, petite question de syntaxe

    pas une affectation une instruction, une instruction étant ce qui est terminé par un ";".

    Exemple :
    b = 2;
    mafonction (++b) ; équivaut à {mafonction(b);b=b+1;}
    mafonction (b++) ; équivaut à {b=b+1;mafonction(b);}


    donc dans le premier cas mafonction est appelée avec l'argument 2, dans le deuxième avec l'argument 3

  13. #12
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par Merlin95 Voir le message
    mafonction (++b) ; équivaut à {mafonction(b);b=b+1;}
    mafonction (b++) ; équivaut à {b=b+1;mafonction(b);}
    Ce ne serait pas dand l'autre sens par hasard ?

  14. #13
    goaoute

    Re : C++, petite question de syntaxe

    On incrémente au début pour remplir un tableau, ce qui fait éviter le zéro (index inexploitable en alphanum).
    On incrémente à la fin quand il y a traitement de variables dans la boucle.

  15. #14
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par goaoute Voir le message
    On incrémente au début pour remplir un tableau, ce qui fait éviter le zéro (index inexploitable en alphanum).
    Il faudrait préciser parce que dit comme ça c’est faux. Tous les remplissages de tableau en C/C++ sont fait en post incrémentation au contraire et on utilise bien évidemment l’index 0.

  16. #15
    jiherve

    Re : C++, petite question de syntaxe

    Bonjour


    Citation Envoyé par Merlin95 Voir le message
    non pas une qestion de compilo, relire mon message et celui de LeMulet.
    ben si car si i n'est utilisé qu'en index de boucle alors pré incrémenté ou post incrémenté c'est kif kif , ce d'autant plus, que certains processeurs ont des instructions dédiées pour çà mais qui décrémentent l'index de boucle car il est plus facile, d'un point de vue hardware, de comparer à zéro et donc le compilo aura fait sa petite cuisine pour s'y adapter car tout le monde se fout de la valeur réelle de l'index.
    Mais si i est aussi utilisé directement ou non comme pointeur alors amha il pourrait y avoir des surprises car suivant le processeur il existera ou non les codes machines permettant de prendre en compte ces pre ou post incrémentation, normalement avec tout compilo honnete cela restera fonctionnel mais les perf pourraient varier de l'un à l'autre.
    si ma mémoire est encore bonne il y avait déjà pre décrémentation et post incrémentation sur le 6809.
    ajout: et bien sur qu'on utilise l'index 0 !!!
    JR
    Dernière modification par jiherve ; 08/07/2019 à 10h56.
    l'électronique c'est pas du vaudou!

  17. #16
    LeMulet

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    ben si car si i n'est utilisé qu'en index de boucle
    Sauf que l'emploi de ce que vous appelez "index de boucle" n'est pas obligatoire dans une instruction for (ça l'est en Pascal, en basic etc, mais pas en c).
    Vous pouvez essayer; faites une boucle for qui n'emploie pas "la variable i" (par exemple) et vous constaterez que vous avez tout le loisir de construire la "boucle for" de votre convenance.
    Par exemple, vous pourriez utiliser une boucle for qui n'incrémente rien du tout, mais qui teste la valeur d'une variable booléenne pour sortir de la boucle.
    Pour vous en convaincre définitivement, vous pouvez aussi employer un "index de boucle" qui ne soit pas de type entier... comme un double, ce que ne permettent évidement pas les boucles for faisant appel à des compteurs.
    Voir ici par exemple : https://www.developpez.net/forums/d1...indice-double/

    Vérifiez également que le compilateur accepte ces syntaxes "étranges".
    Normalement c'est le programmeur qui choisi le code (quelconque) qu'il va mettre dans les 3 paramètres de for.
    La seule limitation étant le deuxième paramètre, dont le code doit fournir un résultat booléen (c'est une évaluation d'une condition).

    Maintenant, vous pourriez avoir raison d'une certaine façon, dans certains cas.
    Peut-être que certains compilateurs ou tous (je n'en ai aucune idée), sont capables d'identifier l'emploi "classique" de for, avec une initialisation d'une variable "compteur de boucle", d'un test sur cette variable puis d'un incrément de cette variable, et donc d'optimiser le code machine produit.
    Bonjour, et Merci.

  18. #17
    jiherve

    Re : C++, petite question de syntaxe

    re
    ici avec i++ ou ++i c'est clairement un index de boucle donc ce que j’écris reste pertinent, et faire une boucle contrôlée par un flottant c'est bien souvent courir à la cata car même avec une condition >= , <= cela peut foirer si jamais on récupère NAN ou un dénormalisé avec == le bug est garanti.
    Il faut lire les datasheet des processeurs et https://www.itu.dk/~sestoft/bachelor...54_article.pdf!
    JR
    l'électronique c'est pas du vaudou!

  19. #18
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    ici avec i++ ou ++i c'est clairement un index de boucle donc ce que j’écris reste pertinent[/URL]!
    Non, c'est du grand n'importe quoi depuis le début, Merlin95 et LeMulet ont parfaitement raison sur ce coup là.
    Ce que tu dis sur l'utilisation des flottants dans une boucle en C est également faux : une boucle bien écrite fonctionnera parfaitement vu que la plupart du temps, on se limite à des constantes genre for(float x = 0.0; x < 1.0; x+=0.1).

  20. #19
    LeMulet

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    re
    ici avec i++ ou ++i c'est clairement un index de boucle donc ce que j’écris reste pertinent,
    C'est un index si vous avez décidé de l'employer comme tel.

    Citation Envoyé par jherve
    et faire une boucle contrôlée par un flottant c'est bien souvent courir à la cata car même avec une condition >= , <= cela peut foirer si jamais on récupère NAN ou un dénormalisé avec == le bug est garanti.
    Ca dépend de ce que vous voulez faire.

    Pour enfoncer le clou, et vous convaincre de la souplesse de la boucle for en c :
    https://books.google.fr/books?id=kcv...%2B%2B&f=false

    On peut par exemple lire un fichier avec la boucle for sans faire appel à un index de boucle.

    Citation Envoyé par jherve
    Il faut lire les datasheet des processeurs et https://www.itu.dk/~sestoft/bachelor...54_article.pdf!
    JR
    Oui, mais ce ne sont pas des considération spécifiques aux boucles.
    Bonjour, et Merci.

  21. #20
    polo974

    Re : C++, petite question de syntaxe

    ici, dans le cas cité, que ce soit i++ ou ++i, il n'y aura aucune différence, vu que l'instruction est isolée (exécutée en fin de boucle juste avant le test de boucle).

    on voit fleurir beaucoup de ++truc, car en c++, la pré-incrémentation d'un objet est généralement plus rapide que la post-incrémentation, mais pour un int, on s'en moque un peu, beaucoup... (https://stackoverflow.com/questions/...n-i-and-i-in-c)

    attention, a[i++] est totalement différent de a[++i] (pré et post prennent tout leur sens).

    on a même le droit d'écrire ++i-- (pas très utile tout seul).

    mais a[++i--] est différent de a[i], mais ne vaut pas mieux que a[i+1]...
    Jusqu'ici tout va bien...

  22. #21
    Merlin95

    Re : C++, petite question de syntaxe

    Citation Envoyé par pm42 Voir le message
    Ce ne serait pas dand l'autre sens par hasard ?
    Oui oups désolé c'est dans l'autre sens.

  23. #22
    Ikhar84
    Animateur Informatique

    Re : C++, petite question de syntaxe

    L'expliquation la plus claire a été donnée pour moi, (merci Merlin):
    Dans le cas du for, l'incrémentation étant la seule instruction de sa "ligne", qu'il y ai post ou pré incrémentation ne change rien, l'évalutation (de l'expression) étant faite à la boucle suivante...

    J'en ai même honte de l'avoir zappé... cela m'a rappelé des consructions biscornues de for en c embarqué, il y a 20 ans...
    D'où on se rend compte que les edi et agl modernes sont bien utiles, mais endorment nos reflexes intellectuels... les plus basiques...
    Dernière modification par Ikhar84 ; 08/07/2019 à 16h29.
    J'ai glissé Chef !

  24. #23
    jiherve

    Re : C++, petite question de syntaxe

    bonsoir,
    On peut par exemple lire un fichier avec la boucle for sans faire appel à un index de boucle
    bien sur mais cela n'est pas le sujet du fil:
    int i;
    for(i=0;i<limite;i++)
    donc i++ ou ++i incrémente t il autre chose qu'un entier quelque-soit sont format?
    si la réponse est non alors c'est un index/compteur de boucle, prenez le temps de lire l'assembleur généré!

    Pour le contrôle par un flottant ce qui est proposé fonctionne ,mais si d'aucun le codent avec un while et une égalité ou inégalité là çà foire.
    J'en ai trop vu pour faire comme si cela n'existait pas!
    JR
    l'électronique c'est pas du vaudou!

  25. #24
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    donc i++ ou ++i incrémente t il autre chose qu'un entier quelque-soit sont format?
    Oui, ça marche avec les flottants, les pointeurs...

    Citation Envoyé par jiherve Voir le message
    si la réponse est non alors c'est un index/compteur de boucle, prenez le temps de lire l'assembleur généré!
    Encore raté...

    Citation Envoyé par jiherve Voir le message
    Pour le contrôle par un flottant ce qui est proposé fonctionne ,mais si d'aucun le codent avec un while et une égalité ou inégalité là çà foire.
    Faux encore.

  26. #25
    jiherve

    Re : C++, petite question de syntaxe

    re
    raté pas si sur car il semblerait que comme d'habitude tu t’égares loin du sujet je réitère :
    int i;
    for(i=0;i<limite;i++)
    Essayes donc un while avec une condition d’inégalité/egalité et on en reparle, si tu ne vois pas le problème alors je préfère ne pas te voir coder!
    https://stackoverflow.com/questions/...ver-terminates
    JR
    l'électronique c'est pas du vaudou!

  27. #26
    pm42

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    raté pas si sur car il semblerait que comme d'habitude tu t’égares loin du sujet je réitère :
    alors je préfère ne pas te voir coder!
    Tu as bien raison : les attaques perso sont la seule chose qui te reste après avoir posté 10 erreurs à suivre sur un langage que tu ne connais pas mais que tu veux expliquer.
    Merci pour la rigolade mais vu le niveau que tu viens d'atteindre, je te laisse.

  28. #27
    Merlin95

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    ben si car si i n'est utilisé qu'en index de boucle alors pré incrémenté ou post incrémenté c'est kif kif , ce d'autant plus, que certains processeurs ont des instructions dédiées pour çà mais qui décrémentent l'index de boucle car il est plus facile, d'un point de vue hardware, de comparer à zéro et donc le compilo aura fait sa petite cuisine pour s'y adapter car tout le monde se fout de la valeur réelle de l'index.
    Mais si i est aussi utilisé directement ou non comme pointeur alors amha il pourrait y avoir des surprises
    D'un point de vue programmatique c'est strictement équivalent mais il y a peut-être des différences (que j'ignore un peu) au niveau du code compilé.
    Dernière modification par Merlin95 ; 08/07/2019 à 21h13.

  29. #28
    jiherve

    Re : C++, petite question de syntaxe

    Re
    Tu as bien raison : les attaques perso sont la seule chose qui te reste après avoir posté 10 erreurs à suivre sur un langage que tu ne connais pas mais que tu veux expliquer.
    Merci pour la rigolade mais vu le niveau que tu viens d'atteindre, je te laisse.
    Je n'ai pas fait d'erreur car je suis resté sur le sujet exact de ce fil une boucle controlée par un entier!!
    Ce que tu sembles ignorer c'est qu'additionner n fois une valeur flottante f ne donnera pas forcement n*f , car le drame avec les softeux purs c'est que, pour la plupart vous ne savez pas du tout comment fonctionne un processeur!
    JR
    l'électronique c'est pas du vaudou!

  30. #29
    jiherve

    Re : C++, petite question de syntaxe

    l'électronique c'est pas du vaudou!

  31. #30
    Merlin95

    Re : C++, petite question de syntaxe

    Citation Envoyé par jiherve Voir le message
    donc i++ ou ++i incrémente t il autre chose qu'un entier quelque-soit sont format?
    oui en fait, ++ signifie augmente la variable d'une manière qui fasse sens, et non ajoute une unité à la variable.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Programmation] Question de syntaxe : modification de certaines valeurs d'un port en C.
    Par CeylordZ dans le forum Électronique
    Réponses: 6
    Dernier message: 12/03/2019, 08h22
  2. [Blanc] Petite présentation et non moins petite question
    Par chartreuse92 dans le forum Dépannage
    Réponses: 1
    Dernier message: 21/10/2018, 13h28
  3. question de syntaxe matlab: ode45
    Par Bartolomeo dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 02/06/2009, 18h28
  4. Question de syntaxe
    Par invitefa769f9f dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 25/10/2007, 11h30