[C] Envoi variable + structure à une fonction
Résolu/Fermé
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
-
13 mai 2009 à 20:15
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 15 mai 2009 à 08:40
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 15 mai 2009 à 08:40
Bonjour à tous,
Voici mon problème,je suis en C et je souhaiterai envoyer à ma fonction 2 paramètres : une structure via un pointeur et une variable de type int.
Mon prototype ressemble à cela :
Pourtant mon compilateur m'affiche une erreur de syntaxe avant de int, pourriez-vous alors m'éclairer sur le fond du problème. Cela viendrait-il d'une loi qui empêche d'utiliser cette combinaison de paramètres ??
PS : j'utilise d'autres fonctions ne prenant que le paramètre Box et fonctionnant très bien.
Merci d'avance pour vos réponses.
SeKoYa
Voici mon problème,je suis en C et je souhaiterai envoyer à ma fonction 2 paramètres : une structure via un pointeur et une variable de type int.
Mon prototype ressemble à cela :
void initializeValue (Box, int);
Pourtant mon compilateur m'affiche une erreur de syntaxe avant de int, pourriez-vous alors m'éclairer sur le fond du problème. Cela viendrait-il d'une loi qui empêche d'utiliser cette combinaison de paramètres ??
PS : j'utilise d'autres fonctions ne prenant que le paramètre Box et fonctionnant très bien.
Merci d'avance pour vos réponses.
SeKoYa
A voir également:
- [C] Envoi variable + structure à une fonction
- Fonction si et - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Envoi impossible messenger - Forum Facebook Messenger
- Messenger: envoi impossible - Forum Facebook Messenger
7 réponses
mamiemando
Messages postés
33591
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 mars 2025
7 834
14 mai 2009 à 19:00
14 mai 2009 à 19:00
Ouais mais syntaxiquement parlant ça ne devrait même pas compiler.
En fait tu aurais pu potentiellement écrire
... car le compilateur n'a pas besoin de connaître le type Box pour déterminer que struct Box * est simplement une adresse (donc le compilateur c'est qu'un Box prend en mémoire la même taille qu'une adresse). Cependant dans ta déclaration, tu définis un type Box qui dépend de struct Box qui a ce stade est de taille inconnue.
Pour le boxint c'est que tu dois avoir un compilateur assez laxiste qui assimile un type indéfini à un int.
Bonne chance
typedef struct Box { int value; int line; int column; int square; int number; } Box;
En fait tu aurais pu potentiellement écrire
typedef struct Box * Box; struct Box { int value; int line; int column; int square; int number; };
... car le compilateur n'a pas besoin de connaître le type Box pour déterminer que struct Box * est simplement une adresse (donc le compilateur c'est qu'un Box prend en mémoire la même taille qu'une adresse). Cependant dans ta déclaration, tu définis un type Box qui dépend de struct Box qui a ce stade est de taille inconnue.
Pour le boxint c'est que tu dois avoir un compilateur assez laxiste qui assimile un type indéfini à un int.
Bonne chance
mamiemando
Messages postés
33591
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 mars 2025
7 834
13 mai 2009 à 22:05
13 mai 2009 à 22:05
Il faudrait l'erreur de compilation et le fichier en question. Il se peut que dans ce fichier C le type Box ne soit pas défini (par exemple parce que le header qui déclare ce type n'est pas inclu).
En tout cas il n'y a aucune restriction de ce côté là en C. Ceci dit si tu veux passer un pointeur vers une structure de type Box le prototype serait plutôt :
Bonne chance
En tout cas il n'y a aucune restriction de ce côté là en C. Ceci dit si tu veux passer un pointeur vers une structure de type Box le prototype serait plutôt :
void initializeValue (Box *, int)
Bonne chance
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
14 mai 2009 à 15:28
14 mai 2009 à 15:28
Non mon header est bien inclus et le prototype de la fonction est bien en début d'header.
J'ai essayé de mettre (Box *, int) au lieu de (Box, int) mais rien n'y fait ??
De quels fichiers exactement as-tu besoin pour m'aider ??
J'ai essayé de mettre (Box *, int) au lieu de (Box, int) mais rien n'y fait ??
De quels fichiers exactement as-tu besoin pour m'aider ??
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
14 mai 2009 à 15:44
14 mai 2009 à 15:44
Euh, alors le programme marche lorsque je met le prototype de ma fonction sous cette forme :
void initializeValue (Boxint);
Là, ça me dépasse... Depuis quand ne met-on aucune séparation entre les deux paramètres ??
Si quelqu'un à une réponse, je ne met pas en résolu le sujet...
void initializeValue (Boxint);
Là, ça me dépasse... Depuis quand ne met-on aucune séparation entre les deux paramètres ??
Si quelqu'un à une réponse, je ne met pas en résolu le sujet...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
14 mai 2009 à 15:46
14 mai 2009 à 15:46
header principalement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33591
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 mars 2025
7 834
14 mai 2009 à 17:06
14 mai 2009 à 17:06
Peux-tu nous donner tes sources ? A mon avis tu es en train de craquer psychologiquement, on sépare toujours les paramètres avec une virgule.
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
14 mai 2009 à 18:02
14 mai 2009 à 18:02
Alors voici l'header :
Et voici la fonction qui est dans le code source :
PS : Je le répète, sous cette forme, tout fonctionne correctement, alors ??
Merci d'avance pour vos réponses.
#ifndef TEST_H_INCLUDED #define TEST_H_INCLUDED void initializeBox (Box); void showCase (Box); void initializeNumber(Boxint); typedef struct Box Box; struct Box { int value; int line; int column; int square; int number; }; #endif // TEST_H_INCLUDED
Et voici la fonction qui est dans le code source :
void initializeNumber(Box *box, int i) { box->number = (i+1); }
PS : Je le répète, sous cette forme, tout fonctionne correctement, alors ??
Merci d'avance pour vos réponses.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
15 mai 2009 à 08:40
15 mai 2009 à 08:40
Je trouvais ça bizarre aussi la déclaration du typedef AVANT la déclaration de la structure.
bonne chance pour la suite.
bonne chance pour la suite.
14 mai 2009 à 19:03
Bonne continuation à toutes et à tous.