IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Opérateur ++ dans le C standard ?


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut Opérateur ++ dans le C standard ?
    Bonjour,

    je n'arrive pas à trouver cette information nulle part, mais est-ce que l'opérateur ++ est défini dans le C standard, ou est-ce un ajout de la norme C99 ?
    Est-ce que le compilo d'aujourd'hui comme gcc l'intègrent par défaut mais sous certains options (par exemple --ansi) un code avec l'opérateur ++ ne compilerait pas ?

    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Bien sûr, c'est l'opérateur d'incrémentation.

    un code avec l'opérateur ++ ne compilerait pas ?
    L'erreur était probablement ailleurs.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Ah non lol, il ne s'agissait pas d'une erreur, juste une discussion avec des personnes qui me soutenait dur comme fer que le "++" n'existait qu'en C++ (c'est d'ailleurs de là, selon eux, que viendrait le "++" du C++ lol), et que si par magie on arrivait à compiler avec GCC un programme avec un opérateur d'incrémentation, c'est surement parce que GCC compilait du C99 et non du C de base. Si on forçait GCC à compiler en C ansi, un code tel que a++ ne compilerait pas !

    Vous me confirmez que ce sont des aberrations ?

    Merci.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Je n'ai malheureusement pas la norme C 89 sous la main, mais je confirme que ++ en fait bien partie.

    Si vous avez un compilateur sous la main, vous pouvez d'ailleurs faire le test en compilant en -ansi ou -c89. Je sais que ca ne prouve rien, mais c'est un debut.

    Il y a d'ailleurs un comportement indefini bien connu, qui est me semble-t-il cite dans la litterature du C K&R (donc avant la norme C89), c'est le fameux
    i = i++;
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par Muetdhiver Voir le message
    Ah non lol, il ne s'agissait pas d'une erreur, juste une discussion avec des personnes qui me soutenait dur comme fer que le "++" n'existait qu'en C++ (c'est d'ailleurs de là, selon eux, que viendrait le "++" du C++ lol), et que si par magie on arrivait à compiler avec GCC un programme avec un opérateur d'incrémentation, c'est surement parce que GCC compilait du C99 et non du C de base. Si on forçait GCC à compiler en C ansi, un code tel que a++ ne compilerait pas !

    Vous me confirmez que ce sont des aberrations ?

    Merci.
    Le langage C++ tient son nom de l'opérateur d'incrémentation ++ présent dans le langage C dont il est issu
    j'ai trouvé ça http://fr.wikipedia.org/wiki/Incr%C3%A9mentation.

    Le ++ dans C++ vient du fait que c'est du C avec des ajouts, j'ai même lu dans un livre que le C# était une version "améliorée" ou plus "fournie" du C++. Si on décompose le # dans C# ça fait C++++.
    => ça vient du livre : C# et .NET version 1 à 4 par Gérard Leblanc.

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oui effectivement, je ne nie pas qu'il y ait un effet de style la dessus, le C "amélioré" devient ++, mais de là a dire que ça s'appelle C++ parce qu'il contient l'opérateur ++ alors que dans le C ce meme opérateur n'existe pas, c'est pour moi une aberration.

  7. #7
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par zouuc Voir le message
    j'ai trouvé ça http://fr.wikipedia.org/wiki/Incr%C3%A9mentation.

    Le ++ dans C++ vient du fait que c'est du C avec des ajouts, j'ai même lu dans un livre que le C# était une version "améliorée" ou plus "fournie" du C++....
    Dire que C++ c'est du C + des ajouts c'est défondable, mais dire que c'est du C amélioré ce n'est pas forcément vrai.

    C++ et C sont deux langages distincts.

    Quant à l'opérateur ++ il ne fait pas partie des ajouts apportés par la C99 par rapport à la C89 ou à la C90 à ce que je sache.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Evidement que ++ existe en C! Même sous deux formes, ++i et i++ (et je pense que depuis qu'ils existent existe le mythe de la différence de performance, et leur utilisation dans les boucle for... bref !)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    Evidement que ++ existe en C! Même sous deux formes, ++i et i++ (et je pense que depuis qu'ils existent existe le mythe de la différence de performance, et leur utilisation dans les boucle for... bref !)
    En faite, la différence de performance entre i++ et ++i est réel sur les itérateurs en C++ (par création d'un nouvel itérateurs à l'appel de la fonction) ...

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Oui oui, mais on est bien sur le sous forum C Et là, non

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Muetdhiver Voir le message
    juste une discussion avec des personnes qui me soutenait dur comme fer que le "++" n'existait qu'en C++ (c'est d'ailleurs de là, selon eux, que viendrait le "++" du C++ lol)
    Tu sais, des cons qui soutiennent n'importe quoi sans preuve t'en verras plus que tu ne pourras compter. Et le pire, c'est que parfois tu sais que t'as raison mais t'as rien pour prouver tes dires et l'autre en face soutient "non c'est pas vrai" ça donne envie de baffer. On reconnait une intelligence au fait qu'il se forme instantanément une ligue d'imbéciles contre lui (Jonathan Swift)

    Mais pour info, tu peux ouvrir "le langage C" de K&R. Tu y verras l'opérateur ++
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oui je suis entièrement d'accord avec toi Sve@r.
    J'ai d'ailleurs bien envie de lui envoyer ta réponse à mon collègue "Monsieur je sais tout"....
    Le pire c'est qu'il me soutient ça exactement de la même façon qu'on dirait "la terre est ronde", ou "dans le ciel il y a des nuages".... Genre "t'es vraiment un gros nase de pas savoir ça à ton age".... Enfin bref.
    Je me calme....

    Merci pour vos réponses a tous et à bientot.
    Alexandre.

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Voici deux extraits de l'ANSI/ISO 9899-1990 (C90) :

    Au sujet des opérateurs ++ et -- postfixés :

    6.3.2.4 Postfix increment and decrement operators

    Constraints


    The operand of the postfix increment or decrement operator shall have qualified or unqualified
    scalar type and shall be a modifiable lvalue.

    Semantics

    The result of the postfix ++ operator is the value of the operand. After the result is obtained,
    the value of the operand is incremented. (That is, the value 1 of the appropriate type is added to
    it.) See the discussions of additive operators and compound assignment for information on
    constraints, types, and conversions and the effects of operations on pointers. The side eftect of
    updating the stored value of the operand shall occur between the previous and the next sequence
    point.
    The postfix -- operator is analopous to the postfix ++ operator, except that the value of the
    operand is decremented (that is, the value 1 of the appropriate type is subtracted from it)

    Forward references: additive operators (6.3.6), compound assignment (6.3.16.2).
    Au sujet des opérateurs ++ et -- préfixés :

    6.3.3.1 Prefix increment and decrement operators

    Constraints


    The operand of the prefix increment or decrement operator shall have qualified or unqualified
    scalar type and shall be a modifiable lvalue

    Semantics

    The value of the operand of the prefix ++ operator is incremented. The result is the new
    value of the operand after incrementation. The expression ++E is equivalent to (E+=1). See
    the discussions of additive operators and compound assignment for information on constraints,
    types, side effects and conversions and the effects of operations on pointers .
    The pretix -- operator is analogous to the prefix ++ operator, except that the value of the
    operand is decremented.

    Forward references: additive operator (6.3.6), compound assignment (6.3.16.2).
    PS : Par contre, je ne peux hélas pas te filer cette norme C90. A priori elle n'est pas (plus ?) disponible gratuitement (?).

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Muetdhiver Voir le message
    J'ai d'ailleurs bien envie de lui envoyer ta réponse à mon collègue "Monsieur je sais tout"....
    Lâche-toi. Et s'il est pas content, qu'il vienne ici qu'on lui en remette une couche...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Opérateur dans les conditions
    Par ez3kiel dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/03/2007, 14h53
  2. opérateur + dans SELECT retourne null ?
    Par david_chardonnet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2007, 10h47
  3. Le type Arbre binaire dans les bibliothèques standards ?
    Par sam69 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 10/05/2006, 13h50
  4. Simuler l'opérateur "*" dans les requêtes
    Par soso78 dans le forum Access
    Réponses: 3
    Dernier message: 29/11/2005, 10h42
  5. Ajout de 'raccourcis' dans une fenêtre standard 'Ouvrir'
    Par Laurent Dardenne dans le forum Windows
    Réponses: 4
    Dernier message: 08/03/2005, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo