[C] Envoi variable + structure à une fonction
Résolu
SeKoYa
Messages postés
152
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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
- Programmer envoi sms - Guide
- Messenger envoi impossible - Forum Facebook Messenger
- Envoi impossible messenger - Forum Facebook Messenger
7 réponses
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
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
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
Bonne continuation à toutes et à tous.