Or, si la fenêtre ne peut pas être initialisée (donc window == NULL) on retourne directement EXIT_FAILURE sans appeler SDL_QUIT, mais ne faut-il pas appeler cette fonction pour "nettoyer" SDL quel que soit le chemin d'exécution (sauf si la SDL n'est pas initialisée) ?
Est-ce que faire un atexit(SDL_Quit) en début de main est une solution ?
La syntaxe inversée vient du code copié-collé, mais c'est une vraie horreur pas du tout intuitive.
D'accord, ça confirme ce que je pensais, c'est logique tout nettoyer après avoir utilisé la lib, je m'étais posé la question comme je venais de voir ce code, que je n'avais jamais utilisé SDL et que je suis plus habitué au C++.
Merci à vous deux
EDIT : Au temps pour moi, le tuto en parle plus loin, je m'étais arrêté de lire trop tôt !
Merci, j'aurais tout de même appris quelque chose.
C'est vrai que pour le coup de l'erreur ça peut être pratique mais j'ai toujours pris l'habitude de compiler avec -Wall -Wextra pour avoir le maximum de warnings et (essayer d') éviter les mauvaises surprises, donc je n'ai pas tellement d'intérêt à utiliser la syntaxe inversée.
Surtout qu'en plus, on dit généralement "là je teste si la variable machin vaut 42" et pas "on regarde si 42 est la valeur de machin".
Je pense que le mieux est d'activer et de corriger les warnings, au moins on a un code fonctionnel et pas besoin d'utiliser une syntaxe inversée qui peut perturber la lisibilité.
La syntaxe inversée vient du code copié-collé, mais c'est une vraie horreur pas du tout intuitive.
Il n'y a pas d'intuitivité "naturelle". En fait, c'est parfaitement intuitif quand on a l'habitude de le voir et de le faire. C'est une question de **culture**, qui n'est pas la même pour tout le monde.
En réalité c'était assez courant de faire ça à une époque. La valeur à comparer est mise devant parce qu'elle pourrait être difficile à repérer dans une condition un peu longue
if (Truc_Init(..............................)!=0) {
}
en la mettant en premier, ça dit de suite (en lisant de gauche à droite) qu'on veut voir si l'appel a échoué
if (0 != Truc_Init(......................)) {
...
}
Le problème, c'est plutôt qu'on ne tient aucun compte du code erreur spécifique retourné, au cas où ça plante.
int error_code = Truc_Init(......);
if (error_code != 0) {
....
// afficher message correspondant au code
}
Une très mauvaise habitude en général, même si SDL utilise une variable globale pour le code erreur (une mauvaise idée aussi !)
- Edité par michelbillaud 28 juillet 2022 à 12:26:27
[...] en la mettant en premier, ça dit de suite (en lisant de gauche à droite) qu'on veut voir si l'appel a échoué
if (0 != Truc_Init(......................)) {
...
}
[...] -
Edité par michelbillaud il y a environ 10 heures
C'était aussi bien plus courant à une époque où les compilos donnaient des messages d'erreurs moins clairs et surtout donnaient beaucoup moins de warnings. Par exemple si on utilisait par erreur = au lieu de == dans une conditionnelle le code :
if (0 = a) {
...
}
produit un message d'erreur alors que
if (a = 0) {
...
}
n'en produit pas …
Mais je parle là d'une époque antédiluvienne.
Quand faut-il appeler SDL_Quit ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Liens utiles pour le C++
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
git is great because Linus did it, mercurial is better because he didn't.
Liens utiles pour le C++
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Liens utiles pour le C++