CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Utilisation des structures

isochre
isochre
Niveau 6
06 août 2014 à 19:55:31

Bonjour,

Je voulais savoir s'il était possible de déclarer une structure dans un autre fichier que le main.c. Si oui, quelles sont les conditions pour que ça marche...

En effet quand j'écris :
"struct Joueur monJoueur;"
dans un fichier autre que le main.c, la compilation plante en me disant que le type est inconnu

Je précise que la structure est décrite dans un fichier en .h que j'ai essayé d'inclure à mon fichier de code source...

isochre
isochre
Niveau 6
06 août 2014 à 20:35:53

up ?

DarK-Killer-57
DarK-Killer-57
Niveau 7
06 août 2014 à 20:49:20

Oui c'est possible, c'est même pour ce genre de choses qu'existent les header et qu'on les utilise. Tu dois donc garder ta façon de faire, cependant je n'ai pas fait de structure depuis un moment et donc ne peux pas t'aider sur commet résoudre ton problème.

isochre
isochre
Niveau 6
06 août 2014 à 21:02:52

Ok je te remercie de ta réponse, j'ai réussi à résoudre le problème par moi même ! :oui:

Info :
Mon fichier header contenait à la fois l'inclusion du mon fichier source et la description de ma structure.
Donc quand le préprocesseur essayait d'inclure le code source où était utilisé ma structure, celle ci n'était pas encore décrite (elle ne l'aurait été que par la suite de la lecture du fichier header), donc il me disait "mais c'est quoi cette structure que t'as mis ????"

Je me sens plus sage maintenant :cool:

Pseudo supprimé
Pseudo supprimé 06 août 2014 à 21:05:16

Tu inclus ton fichier source dans le header ? :doute:

DarK-Killer-57
DarK-Killer-57
Niveau 7
06 août 2014 à 21:07:33

VampireGirl a raison, un header est fait pour être inclus dans un fichier principal, pas l'inverse.

isochre
isochre
Niveau 6
06 août 2014 à 21:09:50

Ouais ouais non mais c'est bien pour ça que ça a merdé (je débute en C) :p)

Du coup la vraie façon de faire c'est d'inclure tous les fichiers sources nécessaires dans le main.c ? C'est ça ?

isochre
isochre
Niveau 6
06 août 2014 à 21:11:01

Merci encore pour vos réponse au fait !

DarK-Killer-57
DarK-Killer-57
Niveau 7
06 août 2014 à 21:17:54

En gros, tu devrais avoir un truc du genre :

  1. include "main.h"

int main(int argc, char *argv[])
{
struct Coordonnees point;
return 0;
}

pour le fichier principal .c, et un truc du genre :

typedef struct Coordonnees Coordonnees;

struct Coordonnees
{
int x;
int y;
};

pour le fichier header .h

http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/creez-vos-propres-types-de-variables

pour plus de détails en débutant, ce lien devrait faire l'affaire :)

isochre
isochre
Niveau 6
06 août 2014 à 21:23:35

C'est le tuto que je suis :hap:

La façon dont est écrit ce code est très claire. Là où j'ai eu des problèmes, c'est quand j'ai voulu l'adapter en utilisant ma structure dans un autre fichier code source que main.c

En effet je voulais seulement avoir mes appels de fonctions dans le main.c, et pas de déclaration de variable/structure. Donc je me suis fait un fichier Exercices.c.
Mais d'après ce que je comprend il faut nécessairement inclure Exercices.c à main.c...

Pseudo supprimé
Pseudo supprimé 08 août 2014 à 00:59:34

Dans un fichier .c tu n'inclus que des .h normalement ! Les fichiers sources sont automatiquement utilisés par ton IDE (normalement, une fois de plus).

Et ne pas déclarer tes variables dans le main t'oblige à en faire des globales, c'est pas ce qui est recommandé. Mais pour un petit code c'est pas un grand drame.

Pseudo supprimé
Pseudo supprimé 08 août 2014 à 02:53:57

L'auteur c'est très simple. Il y a une règle à suivre :

Les headers sont inclus uniquement dans les fichiers source. Dans le header, tu peux mettre les prototypes des fonctions, l'appel de bibliothèques, etc... mais ne jamais inclure les fichiers sources.

Si tu veux que main sache utiliser les fonctions que tu as créées, tu dois seulement inclure le fichier header correspondant au fichier source qui t'intéresse :) Car celui-ci contiendra le prototype de ta fonction, c'est ce que main aura besoin de savoir.

Pseudo supprimé
Pseudo supprimé 08 août 2014 à 03:57:35

Tu peux aussi mettre pleins de chose dans les headers, en général tout ce qui est directive de pré-processeur.

Je m'en sert beaucoup pour mettre des #define par exemple :p)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment