[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   -
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
A voir également:

7 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention   18
 
Merci pour vos réponses et surtout à mamiemando, j'ai (presque) tout compris.
Bonne continuation à toutes et à tous.
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention   18
 
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   Statut Membre Dernière intervention   18
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
header principalement.
0

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

Posez votre question
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention   18
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je trouvais ça bizarre aussi la déclaration du typedef AVANT la déclaration de la structure.
bonne chance pour la suite.
0