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

 

  1. #1
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    mars 2013
    Messages
    477
    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 : 477
    Points : 686
    Points
    686

    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 confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 784
    Points : 4 041
    Points
    4 041

    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
    477
    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 : 477
    Points : 686
    Points
    686

    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 confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 784
    Points : 4 041
    Points
    4 041

    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 753
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 753
    Points : 5 189
    Points
    5 189

    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é.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  6. #6
    Membre actif
    Homme Profil pro
    très occupé
    Inscrit en
    juillet 2014
    Messages
    74
    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 : 74
    Points : 234
    Points
    234

    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. 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