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 :

syntaxe inconnue sur code C


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut syntaxe inconnue sur code C
    bonjour,
    j'ai une source c que je tente de traduire en C#
    J'ai pas mal de background en C mais la je bloque sur une expression que je ne comprend pas si quelqu'un pouvait m'aider je ne comprends pas la syntaxe de cette ligne de code :

    d2=unorm+(d1=a[j][npp1], fabs(d1)) * 0.01;

    je comprend même pas comment ca peut compiler.

    les declarations des variables sont
    double d1, d2,unorm
    double **a

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il faut redescendre à l'ordre d'évaluation des opérateurs, et hurler sur l'auteur, qui a utilisé l'opérateur virgule.
    virgule est un opérateur étrange, utile a peu près uniquement dans l'écriture d'un for, et encore...

    C'est le dernier opérateur en précédence, évalué après tout le reste.
    a , b évalue les deux expressions a puis b, dans cet ordre, et vaut la valeur de b.
    C'est quasiment un ; mais en restant dans une expression.

    d2=unorm+(d1=a[j][npp1], fabs(d1)) * 0.01; est une instruction, constituée de plein de sous morceaux:

    Dans l'ordre de lecture, nous voyons:
    1. d2= ... ;
    2. unorm+(...) * 0.01;
    3. ... , ...
    4. d1=a[j][npp1]
    5. fabs(d1)


    Je me réfère à une référence sur la précédence des opérateurs.
    Je constate que la virgule est évaluée après l'affectation.

    En remplacant la virgule par son comportement, on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d1 = a[j][npp1];
    <temp> = fabs(d1);
    d2 = unorm + <temp>*0.01;
    Une moins mauvaise écriture C aurait pu être d2=unorm+(fabs(d1=a[j][npp1])) * 0.01;.
    Une meilleure écriture serait la suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d1 = a[j][npp1];
    d2 = unorm + fabs(d1)*0.01;
    la première a pour unique avantage d'être une seule expression, donc utilisable directement comme argument. Mais comme elle est utilisée comme instruction, c'est inutile.

    Ce genre de chose vient des anciennes astuces d'aide au compilateur.
    Les compilateurs modernes savent tout à fait faire ce travail, mieux vaut un code lisible.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Futur Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    un grand merci
    c'est effectivement du vieux code (l'algo date de 1974)
    je vais coucher moins bête ce soir

    A+

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

Discussions similaires

  1. Flag inconnu sur Code::Blocks : CPU architecture tuning
    Par Glân von Brylân dans le forum Code::Blocks
    Réponses: 6
    Dernier message: 28/01/2014, 12h53
  2. Code Inconnu sur une page
    Par badrel dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/11/2009, 17h21
  3. [Syntaxe] Pointeur sur enregistrement : syntaxe exacte
    Par phplive dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2005, 21h38
  4. explication syntaxe requete sur pgsql
    Par alain.lc dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/12/2004, 10h24
  5. Tri sur code hiérarchique
    Par cafou33 dans le forum SQL
    Réponses: 5
    Dernier message: 22/03/2004, 17h19

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