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 :

définition syntaxique de for(..)


Sujet :

C

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Par défaut définition syntaxique de for(..)
    Bonjour,

    ma question concerne la définition syntaxique de for. Normalement, cette boucle est défini par: for(instruction,expression,instruction) instruction .

    J'ai aussi lu quelque part qu'une instruction peut être simple, ou un bloc d'instruction, et qu'à chaque fois qu'on peut utiliser un instruction simple, on peut utiliser un bloc.

    Or gcc ne semble pas reconnaitre la ligne suivante:

    for({i=0;j=0};i<4;{i++;j++}) printf("%d %d\n",i,j);

    je sais qu'on écrit d'habitude "i=0,j=0" au lieu de "{i=0;j=0}", mais j'aimerais vraiment comprendre pourquoi la syntaxe précédente n'est pas valable.

    C'est juste une question comme ça qui m'aiderais à comprendre la grammaire du langage C dans le cadre d'un projet de compilation...

    Merci d'avance !

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    6.8.5 Iteration statements
    Syntax
    1 iteration-statement:
    while ( expression ) statement
    do statement while ( expression ) ;
    for ( expressionopt ; expressionopt ; expressionopt ) statement
    for ( declaration; expressionopt ; expressionopt ) statement
    Constraints
    2 The controlling expression of an iteration statement shall have scalar type.
    3 The declaration part of a for statement shall only declare identifiers for objects having
    storage class auto or register.
    Semantics
    4 An iteration statement causes a statement called the loop body to be executed repeatedly
    until the controlling expression compares equal to 0. The repetition occurs regardless of
    whether the loop body is entered from the iteration statement or by a jump.136)
    5 An iteration statement is a block whose scope is a strict subset of the scope of its
    enclosing block. The loop body is also a block whose scope is a strict subset of the scope
    of the iteration statement.
    136) Code jumped over is not executed. In particular, the controlling expression of a for or while
    statement is not evaluated before entering the loop body, nor is clause-1 of a for statement.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai aussi lu quelque part qu'une instruction peut être simple, ou un bloc d'instruction, et qu'à chaque fois qu'on peut utiliser un instruction simple, on peut utiliser un bloc.
    Oui, mais le problème est que les trois termes figurant dans le for ne sont pas des instructions mais des expressions (la seconde étant évaluée comme une expression à valeur booléenne).
    Les instructions se terminent par ; soit typiquement expression ;
    Les ; qui figurent dans le for ne sont que des séparateurs et non des terminateurs d'instruction (d'ailleurs, il n'y a pas de ; derrière la troisième expression).

    C'est également vrai notamment pour le while, le do while et le if.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Par défaut
    merci pour vos réponses. Effectivement, c'est mon prof de C qui s'était planté...

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

Discussions similaires

  1. [Sybase] Définition des symboles
    Par SoaB dans le forum Sybase
    Réponses: 5
    Dernier message: 19/03/2003, 23h06
  2. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56
  3. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53
  4. Définition de "Métalangage"
    Par No dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 19/07/2002, 14h05

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