Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » [Résolu] Pb avec switch case (8 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
geogeo Ecrit le: Dimanche 23 juillet 2006 à 19:56 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


En développant GFA-Basic je me retrouve avec un pb assez génant concernant switch, case...

Voici le genre de chose que je développe avec switch, case:

switch (tag->struct_idx) {
  case GFA_STRUCT_THEN:
  {
    if (...)
      break;
  }   

  case GFA_STRUCT_TO:
  {
    if(...)
      break;
  }

  case GFA_STRUCT_DOWNTO:
  {
    if(...)
      break;
  }

  case GFA_STRUCT_STEP:
  {
    if(...)
      break;
  }
   
  return GFA_ERR_SYNTAX;
}


Or je me retrouve avec un pb assez chiant. Tout marche sauf lorsque je passe à case GFA_STRUCT_TO et que la condition n'est pas validée. Au lieu de terminer par un return GFA_ERR_SYNTAX, je passe dans case GFA_STRUCT_STEP. %)
Je ne devrais pas passer par GFA_STRUCT_STEP est tant donné que je suis passé auparavant par GFA_STRUCT_TO et que GFA_STRUCT_TO != GFA_STRUCT_STEP.

Soit j'ai pas pigé comment marche siwtch, case ^^ soit y a un bug.
-Edité le Dimanche 23 juillet 2006 à 19:57 par geogeo-
-Edité le Dimanche 23 juillet 2006 à 21:02 par geogeo-
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°1   Marquer comme non lu.
Vertyos Ecrit le: Dimanche 23 juillet 2006 à 20:04 Déconnecté(e)    Voir le profil de Vertyos Envoyer un email à Vertyos Visiter le site WEB de Vertyos Envoyer un message privé à Vertyos  

heu... ça passe pas sur "GFA_STRUCT_DOWNTO" plutôt ? si la condition n'est pas vérifiée, d'après ton exemple il n'y a aucun break, donc c'est normal que ça continue sur le "case" suivant (les accolades n'ont pas beaucoup de sens dans ton code d'ailleurs, le bloc "case ... break" n'en a pas besoin)
Membre de [ yAronet ] ^^
(et de [ 3l33t ] aussi, mais chut, coté obscur toussa...)
    
./Post n°2   Marquer comme non lu.
geogeo Ecrit le: Dimanche 23 juillet 2006 à 20:12 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Faut que je tests mais quoi qu'il en soit la condition de case GFA_STRUCT_DOWNTO ou encore celle de case GFA_STRUCT_STEP ne doivent pas être validées!

En effet les accolades n'ont pas de sens, c'est juste pour faciliter la lecture du code.

Je sens que je vais trouver une autre solution autre qu'avec des if et switch case...

[Edit] De plus en regardant le code en ASM TIGCC optimise mon switch case... en une table de sauts.
-Edité le Dimanche 23 juillet 2006 à 20:14 par geogeo-
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°3   Marquer comme non lu.
Jfg Ecrit le: Dimanche 23 juillet 2006 à 20:58 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Essaye de lire ce qu'a écrit Vertyos.
Kill Mario
    
./Post n°4   Marquer comme non lu.
geogeo Ecrit le: Dimanche 23 juillet 2006 à 21:02 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Arf j'ai trop de mal en y réfléchissant c'est normal que mon code ne fonctionne pas.
Faut que j'utilise plus souvent switch case... %)
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°5   Marquer comme non lu.
RHJPP Ecrit le: Dimanche 23 juillet 2006 à 21:38 Déconnecté(e)    Voir le profil de RHJPP Envoyer un email à RHJPP Envoyer un message privé à RHJPP  


geogeo :
Arf j'ai trop de mal en y réfléchissant c'est normal que mon code ne fonctionne pas.
Faut que j'utilise plus souvent switch case... %)

Tu es sûr d'avoir trouvé où était le problème, parce que là, il n'y a pas vraiment besoin de réfléchir ^^
Montre-nous comment tu l'as corrigé :)
    
./Post n°6   Marquer comme non lu.
geogeo Ecrit le: Lundi 24 juillet 2006 à 12:09 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


méeuh lool
Euh oui je suis sûr d'avoir trouvé le pb. %)


switch (tag->struct_idx) {
      // Structures en début de ligne de code
      case GFA_STRUCT_GOTO:
      case GFA_STRUCT_IF:     case GFA_STRUCT_ELSE:   case GFA_STRUCT_ELSEIF: case GFA_STRUCT_ENDIF:
      case GFA_STRUCT_EXIT:   case GFA_STRUCT_EXITIF: case GFA_STRUCT_CONTINUE:
      case GFA_STRUCT_DO:     case GFA_STRUCT_LOOP:
      case GFA_STRUCT_WHILE:  case GFA_STRUCT_WEND:
      case GFA_STRUCT_REPEAT: case GFA_STRUCT_UNTIL:
      case GFA_STRUCT_FOR:    case GFA_STRUCT_NEXT:
      {
        if (i!=start_code)
          return GFA_ERR_SYNTAX_GENERAL;
        
        first_struct_idx = tag->struct_idx;
        continue;
      }
            
      // If ... Then [...]
      // ElseIf ... Then
      case GFA_STRUCT_THEN:
      {
        if (((first_struct_idx==GFA_STRUCT_IF) || 
            ((first_struct_idx==GFA_STRUCT_ELSEIF) && (next_tag->tag==GFA_TAG_EOFLINE))) &&
            !find_then &&
            (i - start_code)>=2)
        {
          find_then = true;
          break;
        }
        
        return GFA_ERR_SYNTAX_GENERAL;
      }
      
      // DownTo | To
      case GFA_STRUCT_DOWNTO:
        find_down_to = true;
      case GFA_STRUCT_TO:
      {
        if ((first_struct_idx==GFA_STRUCT_FOR) && ((i - start_code)>=4) && !find_to && !find_step) {
          find_to = i;
          break;
        }
        
        return GFA_ERR_SYNTAX_GENERAL;
      }
      
      // Step
      case GFA_STRUCT_STEP:
      {
        if ((first_struct_idx==GFA_STRUCT_FOR) && !find_step && find_to && !find_down_to && ((i - find_to)>=2)) {
          find_step = i;
          break;
        }
        
        return GFA_ERR_SYNTAX_GENERAL;
      }

                  ...
    
                  default:;
    }

-Edité le Lundi 24 juillet 2006 à 12:10 par geogeo-
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 24 juillet 2006 à 16:41 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


geogeo :
default:;

Et la gestion d'erreurs (si le fichier tokénisé n'est pas valide)?
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
geogeo Ecrit le: Lundi 24 juillet 2006 à 19:08 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


En effet toute façon, c'est en cours de développement.
Cette étape a lieu juste avant la tokenisation du fichier.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
  :: Index » Forum Ti68K » Programmation C » [Résolu] Pb avec switch case (8 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 61.31ms avec 18 requetes