Que considérez-vous comme "meilleure pratique" quand il s'agit de la gestion des erreurs les erreurs de manière cohérente dans une bibliothèque C.
Il y a deux façons j'ai pensé:
Toujours renvoyer le code d'erreur. Une fonction typique pourrait ressembler à ceci:
MYAPI_ERROR getObjectSize(MYAPIHandle h, int* returnedSize);
Le toujours prévoir une erreur de pointeur approche:
int getObjectSize(MYAPIHandle h, MYAPI_ERROR* returnedError);
Lors de l'utilisation de la première approche, il est possible d'écrire un code comme celui-ci où l'erreur de manipulation de vérification est directement placé sur l'appel de la fonction:
int size;
if(getObjectSize(h, &size) != MYAPI_SUCCESS) {
// Error handling
}
Qui semble mieux que le code de gestion d'erreur ici.
MYAPIError error;
int size;
size = getObjectSize(h, &error);
if(error != MYAPI_SUCCESS) {
// Error handling
}
Cependant, je pense que l'aide de la valeur de retour pour renvoyer des données rend le code plus lisible, Il est évident que quelque chose a été écrit à la taille de la variable dans le deuxième exemple.
Avez-vous des idées sur pourquoi je devrais préférer l'une de ces approches, ou peut-être de les mélanger et de les utiliser de quelque chose d'autre? Je ne suis pas un fan de l'erreur globale unis, car il tend à faire de multi threaded utilisation de la bibliothèque de façon de plus en plus douloureux.
EDIT: C++ des idées précises sur ce serait intéressant de les entendre parler tant qu'ils ne sont pas prévoyant des exceptions puisque ce n'est pas une option pour moi en ce moment...