7
votes

Conversion de l'extension de la plage de cas GNU à la norme C

L'extension de la plage de boîtiers GNU permet de convertir des étages de cas: xxx

Comment convertiriez-vous cela en C99 ou C89)? Ajouter les déclarations de cas individuelles?

Edit: Comment géreriez-vous des énoncés de très gros commutateurs spécifiquement?


0 commentaires

4 Réponses :


8
votes
if (value >=1 && value <= 8) 
{    
    printf("Hello, 1 to 8\n"); 
} 
else 
{   
    printf("Hello, default\n"); 
}  

8 commentaires

J'essaie de remplacer un cas 32 ... 126: :) Ça va être une longue déclaration de commutation ...


Existe-t-il un moyen de générer ces cas avec le préprocesseur C?


@YNV: Vous voudrez peut-être simplement passer à l'utilisation d'une série de déclarations si-d'autre.


@Kevinballard: l'instruction de commutation comporte plusieurs centaines SLOC :) (manipulation des entrées de caractères dans une application de malédiction.)


@YNV: Pourquoi n'avez-vous pas mentionné tous les détails dans l'original Q? Vous devriez afficher tous les détails pertinents lorsque vous demandez à une Q Not sélectivement, révélez-les comme les réponses versées dans.Not fournissant tous les détails en one-Go permet de répondre aux réponses à votre Q de l'original (avec des informations non retenues) sans importance et faites-les regarder stupide. .


@Als: Tu as raison, je suis désolé. J'ai ajouté un commentaire à la question. Espère que cela rend les réponses appropriées.


@YNV: Merci. Le secret pour obtenir des réponses rapides et correctes exprime le problème correctement et proprement.So, je n'ai pas voulu indiquer d'accepter une réponse même si cela ne vous satisfait pas. Si Vous n'êtes pas satisfait des réponses existantes, vous pouvez attendre plus de réponses à entrer puis acceptez une réponse qui vous aide à résoudre le mieux.


@Aloksave Ajouter: 5.21 gammes de cas < / a>



2
votes

Si longue portée que vous puissiez faire, un peu sale mais,
xxx

le meilleur serait probablement être pour supprimer le commutateur pour un si tout ensemble.

être extrêmement strict avec la nidification. Si vous voulez l'interrupteur, pour une raison quelconque, mieux, mieux ce qui précède serait: xxx

ACH, désolé d'être modifié à nouveau. ceci serait plus propre. xxx


0 commentaires

3
votes

J'utiliserais un si instruction: xxx

Vous pouvez ensuite ajouter des instructions si si plus de gammes sont nécessaires, < / p>


0 commentaires

2
votes

Alternativement, car les nombres sont adjacents les uns aux autres, vous pouvez effectuer une optimisation manuelle du boîtier de commutation.

typedef void(*func_t)(void);

#define CASES_N 9

void func0 (void)
{
  printf("Hello, 0\n");
}

void func1 (void)
{
  printf("Hello, 1 to 8\n");
}

static const func_t execute [CASES_N] =
{
  &func0,
  &func1,
  &func1,
  &func1,
  &func1,
  &func1,
  &func1,
  &func1,
  &func1
};

int main()
{
  if(what < CASES_N)
  {
    execute[what]();
  }
  else
  {
    printf("Hello, default\n");
  }
}


0 commentaires