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 :

Pourquoi est-il impossible d'écrire 2f pour un float en C/C++ ?


Sujet :

C

  1. #1
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut Pourquoi est-il impossible d'écrire 2f pour un float en C/C++ ?
    Bonjour, tout est dans le titre.

    Pourquoi l'écriture de 2f ne fonctionne pas en C et l'on doit écrire 2.0f ?

    J'ai l'impression que c'est juste ennuyeux pour rien, non ?

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Mais non, cette règle n'a pas été inventée pour t'embêter.
    Si on écrit 2L est-ce l'entier long 2 ou bien le long double 2?
    On voit que dans le cas de la lettre L, il est vital de distinguer 2L de 2.L.
    Il faut prendre l'habitude d'avoir un nombre clairement entier ou clairement flottant avant le suffixe, sinon ça donne des règles de syntaxe capillotractées.

    On peut quand même écrire 2.f ou 2e0f ou .2e+1f ou 2.0f.

  3. #3
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Merci pour cette explication, je me demandais car en C# il est possible d'écrire 2f, 2d ou encore 2L

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    C# a fait évoluer les suffixes, et a choisi d'imposer au moins un chiffre avant et après le point décimal.
    Il semblerait que chaque langage veuille mettre sa marque, et en effet on pourrait se demander si le but n'est pas d'ennuyer pour rien!

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,
    Citation Envoyé par dalfab Voir le message
    C# a fait évoluer les suffixes, et a choisi d'imposer au moins un chiffre avant et après le point décimal.
    Il semblerait que chaque langage veuille mettre sa marque, et en effet on pourrait se demander si le but n'est pas d'ennuyer pour rien!
    Ben voyons ...

    Un ordinateur n'a aucune intelligence, il faut donc être précis, et ne pas espérer une interprétation de sa part allant obligatoirement dans le sens que tu désires.

    TOUTE ambiguïté doit donc être levée, c'est le but du format imposé.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    Bonjour,

    Si produit une erreur de syntaxe, c'est parce que le C ne comprend pas l'intention du programmeur et considère qu'il y a une incohérence entre le suffixe f explicitement indiqué par le programmeur et la constante littérale qui lui est associée, qui est aussi explicitement représentée sous la forme d'un entier. Du coup, le compilateur ne sait pas comment il doit interpréter cette contradiction et stoppe la compilation.

    En revanche, il est parfaitement licite d'écrire lequel ne produira pas d'erreur de compilation, car le C fera une promotion implicite de type en considérant que le programmeur sait ce qu'il fait. Ce code équivaut à dire au compilateur : je te donne un entier, que je te demande de transformer en float pour affecter le résultat de cette transformation à la variable f. Cette "intelligence" du compilateur C n'en est pas vraiment une, c'est juste que ces promotions de type sont prévues par le standard. Le compilateur n'est simplement pas en mesure de le faire dans le cas précédent car il a affaire à une contradiction.

    Ce cas est aussi une illustration de ce que, pour le langage C, le programmeur "a toujours raison" et sait (ou devrait savoir) pertinemment ce qu'il fait.

    Eks

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

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 20h08
  2. Réponses: 3
    Dernier message: 26/11/2015, 05h06
  3. Réponses: 9
    Dernier message: 27/05/2009, 16h08
  4. Réponses: 2
    Dernier message: 28/04/2006, 17h51

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