Bonjour,

Envoyé par
fleffle
Bonjour, j'aurais plusieurs questions à vous poser :
1) Je créé Un fichier test.h contenant le prototype de ma fonction que j'implémente dans le fichier test.c
Lorsque dans le main j'appelle cette fonction (j'inclue dans le main le fichier test.h) il me dit undefined reference to _mafonction
Si j'inclue le fichier test.c dans le main ca marche...
j'ai lu sur plusieurs sites qu'il fallait inclure les .h
Ici il dit je cite : "Lorsque vous appelez une fonction située dans fonctions.c depuis le fichier main.c, vous aurez besoin d'inclure les prototypes de fonctions.c dans main.c. Il faudra donc mettre un #include "fonctions.h" en haut de main.c"
Quelqu'un peut il m'éclairer ?
La construction d'un programme se déroule en deux étapes.
1- Compilation :
chaque fichier .c devient un fichier .o (objet) qui contient du code exécutable.
A ce moment là, le fichier main.o sait qu'il devra appeler la fonction toto déclarée dans test.h
1 2
| gcc -c main.c -o main.o
gcc -c test.c -o test.o |
2- Edition des liens :
Les fichiers .o sont réunis en un fichier executable. C'est à ce moment là qu'on va avoir besoin de savoir exactement où est définie la fonction toto.
gcc main.o test.o -o prog.exe
Ces deux étapes peuvent paraitres masquée si on passe par un IDE ou si on utilise une commande de compilation unique :

Envoyé par
fleffle
2) je crée un tableau d'entier et un tableau de char contenant plusieurs mots.
int tableau_entier[2]={1,4};
char tableau_char[2][30]={"chaise", "maison"};
Ainsi que deux pointeurs pointant sur chacun des tableaux :
int *pt_int = NULL;
char * pt_char = NULL;
je fais une boucle for pour afficher le contenu du tableau
for (i =0; i<=1; i++)
{
pt_int = &tableau_entier[i];
pt_char = &tableau_char[i];
printf("%d %s\n", *pt_int, pt_char);
}
Pourquoi ne dois-je pas mettre *pt_char sinon ca plante alors que je mets *pt_int, là je suis pas....
%d attend comme paramètre un entier. * pt_int est convient comme entier.
%s attend comme paramètre une chaine de caractère. * pt_char est seulement le premier caractère de la chaine, pas une chaine.
Je verrai plutôt ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
int main(){
int i;
int tableau_entier[2]={1,4};
char tableau_char[2][30]={"chaise", "maison"};
int *pt_int = NULL;
char ** pt_char = NULL;
for (i =0; i<=1; i++)
{
pt_int = &tableau_entier[i];
pt_char = &tableau_char[i];
printf("%d %s\n", *pt_int, *pt_char);
}
return 0;
} |

Envoyé par
fleffle
3) Comment puis-je faire pour passer un tableau à deux dimensions en paramètre de fonction, car cela ne marche pas bien du tout.
1 2 3 4 5 6 7 8 9
| void f(int ** tableau2D, int largeur, int hauteur){
int i,j;
for(i = 0; i < largeur; ++i){
for(j = 0; j < hauteur; ++j){
printf("%d ", tableau2D[i][j]);
}
printf("\n");
}
} |
Partager