Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/06/2010, à 22:08

T_i_t_i

[Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

Re bonjour à tous big_smile
J'ai plusieurs questions, une fois de plus, à vous poser (non sans blague ^^) qui concerne les fichiers en C.

Dans un petit programme, vous incluez, par exemple, stdlib.h en haut de votre main.c. Tout va bien pour le moment. Vous effectuez un printf dans la fonction main(), tout est clair jusqu'à présent...
Mais il y a quelque chose de bizarre : Nulle part dans votre code ni dans stdlib.h ne se trouve la fonction printf.
Dans stdlib, il n'y a que son prototype, et le code de printf ne se trouve pas dans votre fonction main()...

Oo ...

Mais alors ou se trouve donc la fonction printf ? Comment le programme peut-il marcher, alors que dans le code source ne se trouve que le prototype et pas la fonction elle-même ?
Mon problème est que j'ai créé une fonction pour remplacer scanf, et j'aimerais qu'en incluant le fichier.h dans mes futurs programmes je puisse me servir de ma fonction :
#include <mon_fichier_qui_contient_le_prototype_de_ma_fonction.h>
// ...
ma_fonction(parametre);

Ou placer le .h et le .c ? En gros, comment faire ça ?
Vu que le .h ne contient que les prototypes et pas les fonctions, comment faire en sorte que le .c avec la fonction soit inclus au projet ?

Ne serait-ce pas une question de répertoire standard, ou un truc du genre, ou serait placés tous les .c ?

Merci d'avance pour vos réponses smile

Dernière modification par T_i_t_i (Le 20/06/2010, à 22:41)


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne

#2 Le 20/06/2010, à 22:28

gilbert

Re : [Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

salut,

les fonctions prototypées dans les header files "standards" que tu appelles dans ton code sont déjà compilées et sont présentes dans la librairie libc.. Il n'y a donc pas besoin du code. (Gain de temps précieux à la compilation).

Mais si tu veux lire leur code tu peux installer les sources de libc.

plus d'info sur la librairie : http://www.gnu.org/software/libc/

EDIT : si tu veux créer une nouvelle fonction. Alors tu peux la compiler par exemple

gcc maNouvelleFonction.c -o maNouvelleFonction.o

et tu as un objet... ensuite tu peux lier cet objet avec le linker ou bien créer une librairie qui contiendra ton objet (statique .a dynamique .so)

Les include par défaut sont dans /usr/include et les librairies sont dans /use/lib

mais si tu ne veux pas les mettre dans ces dossier (ce qui est recommandé) tu peux toujours préciser le dossier où l'objet se trouve à la compilation avec le paramètre -I dossier et ainsi quand tu inclueras ton header file il ira regarder dans ton dossier en plus. Ce qui est préférable.

Dernière modification par gilbert (Le 20/06/2010, à 22:34)


Simplement moi-même..

Hors ligne

#3 Le 20/06/2010, à 22:31

T_i_t_i

Re : [Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

d'accord, merci smile
Je peux faire la même chose pour mes fonctions, faire en sorte qu'elles soient comme les fonctions standards (pré compilées) ? Ou tout du moins, comment faire pour inclure mon fichier.c contenant ma fonction ?
Inclure, dans main.c, mon fichier.h, qui lui même va inclure le fichier.c avec les fonctions ? Ca ne me semble pas logique, de plus il me semble qu'on ne doit jamais faire d'include de fichiers.c ...

Edit : Un grand merci pour tes explications smile

Dernière modification par T_i_t_i (Le 21/06/2010, à 09:20)


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne

#4 Le 20/06/2010, à 22:45

gilbert

Re : [Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

Un petit exemple. une fonction qui affiche hello world.

ton header file :

/* fichier helloWorld.h */
#ifndef __HELLO_WORLD_H__
#define __HELLO_WORLD_H__

#include <stdio.h>

void helloWorld(void);

# endif /* __HELLO_WORLD_H__ */

ton fichier c :

/* fichier helloWorld.c */
#include "helloWorld.h"

void helloWorld(void) {
    printf("hello world!\n");
}

après tu compiles ton fichier helloWorld.c

gcc -c helloWorld.c -o helloWorld.o

Ensuite tu l'ajoute dans une librairie, faisons un .a

ar -q libHelloWorld.a helloWorld.o

Ensuite dans le fichier de ton projet où tu veux appeler ta fonction helloWorld() :

#include <helloWorld.h>
/* ... */

/* appel de la fonction */
helloWorld();

et quand tu vas compiler :

gcc -c programme.c -I/chemin/vers/ton/header -o programme.o
gcc -o programme programme.o -L/chemin/vers/ta/lib -lHelloWorld

et ça devrait marcher... (je dis ça de tête)

Dernière modification par gilbert (Le 20/06/2010, à 22:52)


Simplement moi-même..

Hors ligne

#5 Le 20/06/2010, à 23:07

grim7reaper

Re : [Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

Hum, je remplacerais le

ar -q libHelloWorld.a helloWorld.o

par un

ar -crs libHelloWorld.a helloWorld.o

Sinon tout me semble OK.

Hors ligne

#6 Le 21/06/2010, à 09:21

T_i_t_i

Re : [Resolu] Langage C, fichiers.h, ou sont les .c correspondants ?

C'est génial, je copie cette page sur mon ordi, merci beaucoup de votre aide ! smile
Je serait heureux pendant mon bac cette aprèm tongue

Dernière modification par T_i_t_i (Le 21/06/2010, à 09:22)


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne