c++ handling y a-t-il des problèmes avec cette macro? Vérifiez le statut et retournez en cas d'échec



std expected (1)

nous avons des lignes fréquemment récurrentes dans le code qui vérifient le statut de retour d'une fonction, et si c'est un échec, retournez avec le statut immédiatement. J'ai pensé à définir une macro pour cela:

#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; }

La variable locale est parce que le paramètre x pourrait être un appel de fonction.

Comme je sais qu'il y a quelques artefacts étranges d'utilisation de macros et je ne suis pas très compétent en eux, je voudrais demander si vous voyez des problèmes avec cette macro. Merci.

(Et s'il vous plait, ne suggérez pas d'utiliser des exceptions - Je déteste ce style moi-même, mais c'est ainsi que ça se passe ici)


Answer #1

Je voudrais le modifier un peu; en l'entourant de do{} while(0) comme ceci:

#define RETURN_IF_FAILED(x) do { int stat = (x); if (FAILED(stat)) return stat; } while(0)

Maintenant vous pouvez utiliser cette MACRO, comme ceci:

if (SomeCondition)
  RETURN_IF_FAILED(x); //<--- note the "usual" semicolon!
else
{
   //some code
}

Avec votre version, ce code n'est PAS du tout possible. Le ; après la macro causerait un problème dans votre version!





error-handling