Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -28%
Brandt LVE127J – Lave-vaisselle encastrable 12 ...
Voir le deal
279.99 €

Plusieurs petites questions

2 participants

Aller en bas

Plusieurs petites questions Empty Plusieurs petites questions

Message  Romu' Sam 11 Oct 2008 - 17:39

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é :

Quand on désire utiliser une fonction qui est définie ailleurs, il est nécessaire de la déclarer comme étant externe. [...]
Par "définie ailleurs" je comprends "définie dans un autre fichier". Mais voilà :
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... */
ou pire encore :
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 */
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 ?

En fait je demande si ça vaut le coup d'essayer de supprimer ces avertissements, ou si "on s'en fou".

Romu'
Bavard
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France

Revenir en haut Aller en bas

Plusieurs petites questions Empty Re: Plusieurs petites questions

Message  -ed- Sam 11 Oct 2008 - 18:49

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é :

Quand on désire utiliser une fonction qui est définie ailleurs, il est nécessaire de la déclarer comme étant externe. [...]
Par "définie ailleurs" je comprends "définie dans un autre fichier". Mais voilà :
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.
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.

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.

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,
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 ?

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.

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 ?
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.
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Plusieurs petites questions Empty Re: Plusieurs petites questions

Message  Romu' Mar 14 Oct 2008 - 15:12

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 ;).

Romu'
Bavard
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France

Revenir en haut Aller en bas

Plusieurs petites questions Empty Re: Plusieurs petites questions

Message  -ed- Mer 15 Oct 2008 - 15:38

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 ;).
Merci.

Un peu de soutient fait toujours plaisir.


Dernière édition par -ed- le Mer 22 Oct 2008 - 2:43, édité 1 fois (Raison : typo)
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Plusieurs petites questions Empty Re: Plusieurs petites questions

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser