2016-10-11 1 views
0

Considérez ce qui suit:vide Si l'optimisation

int status = 0; 

while(status < 3) 
{ 
    switch(status) 
    { 
     case 0: 
      // Do something 
      break; 

     case 1: 
      if(cond1 && cond2 || cond3 && cond4) 
       ; // status = 1 
      else if(cond5) 
       status = 2; 
      else 
       status = 0; 
      // there could be more else-if statements 
      break; 

     case 2: 
      // Do something else 
      break; 
    } 
    status++; 
} 

Étant donné que la première instruction if est seulement là pour des raisons de lisibilité et que, comme le montre, son corps est vide (car redondant), je me demandais comment un compilateur (soit un compilateur d'avance ou de juste-à-temps) peut-il optimiser ceci (si une optimisation est possible).

+0

Ce code n'a pas beaucoup de sens et crée dans certaines conditions une boucle infinie. –

+0

Le premier 'if' est fonctionnel. Cela limite la portée de 'else'. –

+0

@ PM77-1 Bien sûr que non, mais ce n'était pas le point. J'ai effectivement pensé que cela pourrait être annulé dans la dernière déclaration, ce qui en ferait une déclaration différente, mais je n'en suis pas sûr. Je ai essayé de regarder la sortie de l'assemblée sans la moindre chance. –

Répondre

1

Pour un compilateur général, la réponse est non.

Deux optimisations étroitement liées sont le Data flow optimizations, qui vise à éliminer les doubles calculs et les chemins impossibles dans le code. Un autre est Currying, qui vise à optimiser une fonction générale en ce qui concerne le paramètre spécifique.