[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 9696 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 :
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

7 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
14 mai 2009 à 19:00
Ouais mais syntaxiquement parlant ça ne devrait même pas compiler.
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
1
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 à 19:03
Merci pour vos réponses et surtout à mamiemando, j'ai (presque) tout compris.
Bonne continuation à toutes et à tous.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
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 :
void initializeValue (Box *, int)

Bonne chance
0
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
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 ??
0
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
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...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
14 mai 2009 à 15:46
header principalement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
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.
0
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
Alors voici l'header :
#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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
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.
0