Passage d'un tableau a X dimensions a une fonction et ANSI
AsM0DeUz
Messages postés19Date d'inscriptionjeudi 17 août 2006StatutMembreDernière intervention 4 février 2009
-
18 nov. 2008 à 12:20
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 2008
-
18 nov. 2008 à 21:06
Bonjour,
J'aurai besoin d'un petit eclaircissement dans le cas ci dessous (c'est juste un exemple) :
#include <stdio.h>
2
3 void filltab(int, int *, int, int);
4 void printok(int, int *, int, int);
5
6 int main()
7 {
8 int tab[3][2] = {{0,0},{0,0},{0,0}};
9 filltab(5, tab, 3 , 2);
10 printok(5, tab, 3 , 2);
11 }
12
13 void filltab(int number, int *tab, int line, int column)
14 {
15 int i;
16
17 for (i=0; i < line*column; i++)
18 *(tab+i) = number;
19 }
20
21 void printok(int number, int *tab, int line, int column)
22 {
23 int i;
24
25 for (i=0; i < line*column; i++)
26 if(*(tab+i) == number)
27 printf("OK");
28 }
Lors de la compilation avec gcc j'ai le message suivant :
gcc -ansi test.c
test.c: In function ‘main’:
test.c:9: warning: passing argument 2 of ‘filltab’ from incompatible pointer type
test.c:10: warning: passing argument 2 of ‘printok’ from incompatible pointer type
donc si dans les lignes 9 et 10 je cast (int *), je n'ai plus le probleme.
Apres m'etre renseigné a gauche et a droite, certains disent que ca vient du compilateur qui ne repondrait pas à la norme ANSI qui dirait qu'un tableau tab[] et *tab c'est la meme chose (qu'il y ait X dimensions vu qu'en mémoire toutes les cases se suivent). Pourtant lors de la compil je mets bien -ansi ce qui me semble devrait régler le problème.
Est ce bien un probleme (ou non suivi de la norme ANSI) de compilateur ?
Merci
A voir également:
Passage d'un tableau a X dimensions a une fonction et ANSI
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 18 nov. 2008 à 21:06
Salut,
int *tab et int tab[] sont bien la même choses.
ce qui est différent c'est int *tab et int tab[n][m] (qui est identique int **tab).
La présence de warning est donc bien normal. Un cast pour indiquer au compilo que tu sais ce que tu fais les fera disparaitre.