Plusieurs petites questions
2 participants
Page 1 sur 1
Plusieurs petites questions
Bonjour à tous ;) !
J'ai deux questions indépendantes à vous poser :
1. En lisant des articles au hasard du tutoriel de Bernard Cassagne (le lien est donné sur la page d'accueil de ce site), je suis tombé sur un truc qui m'a embrouillé :
dans un de mes codes par exemple, les définitions de fonctions sont séparées en plusieurs fichiers, et je n'ai ni erreur ni avertissement de la part du compilateur ou de quoi que ce soit lorsque je compile le projet, alors qu'une fonction utilisée dans un fichier et définie dans un autre n'est pas déclarée comme 'externe' dans le fichier d'en-tête.
J'aurais aimé avoir plus de précisions là-dessus.
2. Ma 2ième question concerne le compilateur que j'utilise (GCC). Je l'utilise avec les options données dans ce site (-Wall -Wextra -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized -Wunreachable-code). Le problème est qu'il me produit des avertissements "faux", et j'aimerais savoir comment les éviter si possible.
a) Il m'indique certaines parties de codes comme n'allant jamais s'exécuter, alors qu'une simple lecture du code montre que si, et on voit bien à l'exécution qu'elles s'exécutent correctement. Certes c'est marqué dans la documentation qu'il est possible que ces erreurs se produisent, mais quand même, dans mon cas il n'y a aucun piège :
En fait je demande si ça vaut le coup d'essayer de supprimer ces avertissements, ou si "on s'en fou".
J'ai deux questions indépendantes à vous poser :
1. En lisant des articles au hasard du tutoriel de Bernard Cassagne (le lien est donné sur la page d'accueil de ce site), je suis tombé sur un truc qui m'a embrouillé :
Par "définie ailleurs" je comprends "définie dans un autre fichier". Mais voilà :
Quand on désire utiliser une fonction qui est définie ailleurs, il est nécessaire de la déclarer comme étant externe. [...]
dans un de mes codes par exemple, les définitions de fonctions sont séparées en plusieurs fichiers, et je n'ai ni erreur ni avertissement de la part du compilateur ou de quoi que ce soit lorsque je compile le projet, alors qu'une fonction utilisée dans un fichier et définie dans un autre n'est pas déclarée comme 'externe' dans le fichier d'en-tête.
J'aurais aimé avoir plus de précisions là-dessus.
2. Ma 2ième question concerne le compilateur que j'utilise (GCC). Je l'utilise avec les options données dans ce site (-Wall -Wextra -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized -Wunreachable-code). Le problème est qu'il me produit des avertissements "faux", et j'aimerais savoir comment les éviter si possible.
a) Il m'indique certaines parties de codes comme n'allant jamais s'exécuter, alors qu'une simple lecture du code montre que si, et on voit bien à l'exécution qu'elles s'exécutent correctement. Certes c'est marqué dans la documentation qu'il est possible que ces erreurs se produisent, mais quand même, dans mon cas il n'y a aucun piège :
- Code:
/* pas la peine de se préoccuper des types ;) */
SDL_Surface* texte = NULL;
/* ... */
texte = TTF_RenderText_Blended(...); /* Renvoie NULL en cas d'erreur, sinon une adresse valide...*/
if (texte != NULL) {
/* ICI : ligne notée comme n'allant jamais être exécutée */
}
/* etc... */
- Code:
/* code présent à la fin d'une fonction */
while (...)
;
return 0; /* ligne notée comme n'allant jamais être exécutée, alors qu'à l'exécution la fonction se termine bien (sans le 'while' il n'y a pas d'avertissement). */
} /* fin de la fonction */
En fait je demande si ça vaut le coup d'essayer de supprimer ces avertissements, ou si "on s'en fou".
Romu'- Bavard
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Re: Plusieurs petites questions
L'adjectif 'nécessaire' dans le texte de B.Cassagne est excessif. En fait, ce qu'il faut comprendre, c'est que par défaut, une fonction est définie comme 'publique'. Ca signifie qu'elle accepte un lien externe.Romu' a écrit:1. En lisant des articles au hasard du tutoriel de Bernard Cassagne (le lien est donné sur la page d'accueil de ce site), je suis tombé sur un truc qui m'a embrouillé :Par "définie ailleurs" je comprends "définie dans un autre fichier". Mais voilà :
Quand on désire utiliser une fonction qui est définie ailleurs, il est nécessaire de la déclarer comme étant externe. [...]
dans un de mes codes par exemple, les définitions de fonctions sont séparées en plusieurs fichiers, et je n'ai ni erreur ni avertissement de la part du compilateur ou de quoi que ce soit lorsque je compile le projet, alors qu'une fonction utilisée dans un fichier et définie dans un autre n'est pas déclarée comme 'externe' dans le fichier d'en-tête.
J'aurais aimé avoir plus de précisions là-dessus.
Il est possible d'ajouter le mort clé extern devant les prototypes séparés des fonctions (dans les .h) mais son influence est nulle sur le compilateur. Par contre, ça peut avoir un intérêt documentaire. Personnellement, je m'en passe.
En fait, c'est un petit bug de gcc qui dit en gros, que le code étant optimisé, on ne passe plus par là... (ce qui est vrai). Mais était-il nécessaire de le signaler ?2. Ma 2ième question concerne le compilateur que j'utilise (GCC). Je l'utilise avec les options données dans ce site (-Wall -Wextra -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized -Wunreachable-code). Le problème est qu'il me produit des avertissements "faux", et j'aimerais savoir comment les éviter si possible.
a) Il m'indique certaines parties de codes comme n'allant jamais s'exécuter,
Si c'est gênant, on peut désactiver l' optimisation (retirer -O). Mais certains défauts d'initialisation risquent de ne plus être vus... Il faut trouver le compromis acceptable.
Un avertissement justifié n'est pas gênant. Mais il peut encombrer la liste des avertissements et empêcher la vue d'autres avertissements plus graves... Quand c'est possible et simple, j'essaye de les éviter. l'astuce du (void) parametre est correcte.b) J'ai déclarée pour les besoins d'une bibliothèque que j'utilise ma fonction main comme ceci : int main (int argc, char** argv) { ... }. Or je n'utilise pas ces 2 variables (mais sans j'ai une erreur 'Conflicting types') et le compilateur me le signal. J'ai lu quelque part que pour éviter ça on pouvait noter l'instruction (void)argc; pour qu'il n'affiche pas d'avertissement, mais est-ce que ça en vaut la peine ?
Re: Plusieurs petites questions
Merci !
J'en profite pour dire que ce site et les sites donnés en liens m'ont beaucoup aidé, et continuent à m'aider d'ailleurs ;).
J'en profite pour dire que ce site et les sites donnés en liens m'ont beaucoup aidé, et continuent à m'aider d'ailleurs ;).
Romu'- Bavard
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Re: Plusieurs petites questions
Merci.Romu' a écrit:Merci !
J'en profite pour dire que ce site et les sites donnés en liens m'ont beaucoup aidé, et continuent à m'aider d'ailleurs ;).
Un peu de soutient fait toujours plaisir.
Dernière édition par -ed- le Mer 22 Oct 2008 - 2:43, édité 1 fois (Raison : typo)
Sujets similaires
» Comptage des voyelles d'une suite de caracteres, plusieurs questions..
» Des questions en tout genre !
» quelques questions de debutant
» Des questions en tout genre !
» quelques questions de debutant
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|