Quelques notions de bases en C que je voudrais vérifier
Résolu/Fermé
A voir également:
- Quelques notions de bases en C que je voudrais vérifier
- Verifier un lien - Guide
- Verifier compatibilite windows 11 - Guide
- Vérifier mot de passe compromis - Guide
- Vérifier si une phrase est correcte - Accueil - Google
- Verifier les appareils connectés facebook - Guide
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
27 juil. 2013 à 11:49
27 juil. 2013 à 11:49
Bonjour,
Q1 : Attention à ne pas confondre bibliothèque et fichier header.
La bibliothèque, c'est un programme embarquant un certain nombre de fonctions pouvant être appelées depuis n'importe quelle autre programme.
Le header contient juste les prototypes des fonctions de la bibliothèque.
Les deux sont donc essentielles.
Q2 : Normalement, c'est plutôt _WIN32 qui est utilisé. Confirmes-tu que tout n'est pas écrit en majuscule ? Là, faut voir du côté des variables définies par ton compilateur.
Je sais que les #ifndef/#define/#endif servent à éviter des inclusions à répétitions lorsque deux bibliothèque s'appellent l'une l'autre, est-ce une précaution parce que la bibliothèque s'incluerait elle-même dans le cas présent?
Ce n'est pas pour éviter l'inclusion multiple de bibliothèque mais de header.
Q3 : Du code, ça serait plus simple pour t'aider...
Q4 : Le typedef, c'est pour définir un synonyme. Dans le cas présent, tu dis que struct {...} est l'équivalent de nom_...
Sinon, non il n'existe pas différentes manières d'utiliser les structures.
Q5 :
#includes
Définitions de constantes symboliques, types, énums et variables statiques.
Pour les variables statiques, cela dépend. Tu peux également en trouver dans les fonctions. Mais le comportement sera différent (static dans les fonctions crée une variable dans le segment data ou .bss, la variable ne sera donc pas détruite après la fin de la fonction comme ce serait le cas pour une variable automatique).
La variable statique placée en dehors d'une fonction est juste une variable globale dont tu restreins la portée au fichier.
Tu peux rajouter également les variables globales, les structures, etc.
Les déclarations de fonction ? Oui c'est ici, mais c'est plus propre dans un .h.
Ce n'est pas Main(), mais int main(void) ou int main(int argc, char *argv[]) (voire int main(int argc, char **argv))
Cdlt,
Q1 : Attention à ne pas confondre bibliothèque et fichier header.
La bibliothèque, c'est un programme embarquant un certain nombre de fonctions pouvant être appelées depuis n'importe quelle autre programme.
Le header contient juste les prototypes des fonctions de la bibliothèque.
Les deux sont donc essentielles.
Q2 : Normalement, c'est plutôt _WIN32 qui est utilisé. Confirmes-tu que tout n'est pas écrit en majuscule ? Là, faut voir du côté des variables définies par ton compilateur.
Je sais que les #ifndef/#define/#endif servent à éviter des inclusions à répétitions lorsque deux bibliothèque s'appellent l'une l'autre, est-ce une précaution parce que la bibliothèque s'incluerait elle-même dans le cas présent?
Ce n'est pas pour éviter l'inclusion multiple de bibliothèque mais de header.
Q3 : Du code, ça serait plus simple pour t'aider...
Q4 : Le typedef, c'est pour définir un synonyme. Dans le cas présent, tu dis que struct {...} est l'équivalent de nom_...
Sinon, non il n'existe pas différentes manières d'utiliser les structures.
Q5 :
#includes
Définitions de constantes symboliques, types, énums et variables statiques.
Pour les variables statiques, cela dépend. Tu peux également en trouver dans les fonctions. Mais le comportement sera différent (static dans les fonctions crée une variable dans le segment data ou .bss, la variable ne sera donc pas détruite après la fin de la fonction comme ce serait le cas pour une variable automatique).
La variable statique placée en dehors d'une fonction est juste une variable globale dont tu restreins la portée au fichier.
Tu peux rajouter également les variables globales, les structures, etc.
Les déclarations de fonction ? Oui c'est ici, mais c'est plus propre dans un .h.
Ce n'est pas Main(), mais int main(void) ou int main(int argc, char *argv[]) (voire int main(int argc, char **argv))
Cdlt,
27 juil. 2013 à 15:35
Q1: donc le .h sert à contenir les déclarations de fonctions?
Mais lorsque je fais un "#include<libTableauNoir.h>", comment libTableauNoir.h "sait" que les définitions des fonctions sont contenues dans le fichier TableauNoir.c"?
J'ai voulu également essayer de trouver l'écriture de string.h en C mais j'ai lu que ça n'avait pas forcément été écrit en C.
Donc les .h existent pour d'autres langages? Tous?
Cela veut-il dire que je peux coder des fonctions dans un langage A, mettre les déclarations dans un .h et l'inclure dans un code écrit dans un langage B?
Q2: Oui, c'était en majuscules.
Q3: Voici le code:
Q5: entendu pour les déclarations de fonctions et la disposition, pour main() je désignais bien ça, j'ai juste "simplifié" pour la rédaction.
Si les variables statiques sont des variables dont "la portée est restreinte au fichier", (mais à valeurs dans tout le fichier?), au contraire, la portée des constantes symboliques n'est pas restreinte au dit fichier, mais dans les fichier faisant une inclusion de la librairie également?
Que puis-je mettre d'autre dans un header?
Cordialement.
27 juil. 2013 à 18:30
Yep, il peut contenir aussi des variables globales (structure, ...).
Mais lorsque je fais un "#include<libTableauNoir.h>", comment libTableauNoir.h "sait" que les définitions des fonctions sont contenues dans le fichier TableauNoir.c"?
Bah, il le sait pas. Et il n'a pas besoin de le savoir. Le principal est qu'à la compilation (et plus précisément lors de l'édition des liens) que la fonction existe parmi les *.c du programme (peu importe que ça doit dans tartempion.c ou TableauNoir.c).
J'ai voulu également essayer de trouver l'écriture de string.h en C mais j'ai lu que ça n'avait pas forcément été écrit en C.
Donc les .h existent pour d'autres langages? Tous?
string.h est une partie des définitions de la bibliothèque libC.
Donc les .h existent pour d'autres langages? Tous?
Disons plutôt que, ta bibliothèque tu la codes dans le langage que tu veux. Ensuite, si tu as le .h associé (pour les appels en C), tu peux effectivement utiliser la bibliothèque.
Q3/
Ce qu'il faut retenir c'est que les variables statiques utilisées dans ce code sont des variables globales dont la portée est restreinte au fichier. Donc tu pourras appeler ces variables de n'importe quelle fonction du fichier.
Q5/
Si les variables statiques sont des variables dont "la portée est restreinte au fichier",
Attention à bien préciser : placées en dehors de fonctions (sinon, ça change la définition) :-p.
au contraire, la portée des constantes symboliques n'est pas restreinte au dit fichier, mais dans les fichier faisant une inclusion de la librairie également?
Bah si, c'est restreint aussi au fichier. C'est pour cela qu'il faut inclure les .h dans tous les fichiers nécessitant la déclaration des prototypes de fonctions.
Et, je le redis (mais ça a son importance) : on n'inclue pas une bibliothèque mais un header. (Le .h n'est pas la bibliothèque).
27 juil. 2013 à 18:36
Sinon à part ça j'ai tout compris, merci à toi =)
27 juil. 2013 à 18:56
Comme la Q1. Dis-toi bien que #include est une bête instruction préprocesseur qui va lui dire de remplacer tout le contenu du fichier dans le .c appelant le .h.
27 juil. 2013 à 19:10