J'essaie de compiler le code suivant sans avertissements:
while (window.pollEvent(event))
{
switch (event.type) {
case sf::Event::Closed:
window.close(); break;
case sf::Event::KeyPressed:
if(event.key.code == sf::Keyboard::Escape )
window.close();
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) )
particleSystem.fuel( 200/* * window.getFrameTime() */);
if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) )
particleSystem.setPosition( --xpos, ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) )
particleSystem.setPosition( ++xpos, ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
particleSystem.setPosition( xpos, --ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) )
particleSystem.setPosition( xpos, ++ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
particleSystem.setGravity( --xgrv * 0.1f, ygrv * 0.1f);
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
particleSystem.setGravity( ++xgrv * 0.1f, ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
particleSystem.setGravity( xgrv * 0.1f, --ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
particleSystem.setGravity( xgrv * 0.1f, ++ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::G ) )
particleSystem.setGravity( 0.0f, 0.0f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::P ) )
particleSystem.setPosition( 320.0f, 240.0f );
break;
}
cependant, je reçois beaucoup d'avertissements:
/home/bluszcz/private/repo/deerportal/game.cpp:444: warning: enumeration value 'LostFocus' not handled in switch [-Wswitch]
Ce qui en moi n'est pas un problème, car je n'ai pas besoin de gérer tous les types d'événements.
Ajouter
default:
break;
à mon code supprime les avertissements, mais est-ce le meilleur moyen de résoudre ce problème?
Cela dépend de ce que vous essayez de réaliser. La règle générale est
Il vaut mieux être explicite.
L'omission des étuis donne simplement l'impression que vous en avez oublié. Être explicite garantit aux lecteurs suivants de votre code que vous destiné à ne rien faire pour certains événements.
À la lumière de cela, vous avez deux options:
default:
break;
Cela supprime l'avertissement et indique clairement que vous n'avez pas l'intention de gérer les autres types d'événements ici.
Répertoriez chaque type d'événement, suivi d'un break
. Ceci est également explicite et a l'avantage supplémentaire que, si vous ajoutez un type d'événement, le compilateur vous avertira à nouveau que votre switch
est incomplet. Cela peut être utile lorsque vous avez de nombreuses instructions switch, dont certaines doivent être modifiées pour faire quelque chose de nouveau lorsqu'une valeur enum est ajoutée.
Je ne recommanderais pas d'utiliser une série d'instructions if
ici. Un switch
est plus clair, réduit la quantité de frappe et (comme vous l'avez vu) peut produire de meilleurs avertissements du compilateur pour les cas que vous avez omis.