2017-08-25 2 views
1

Je suis juste nouveau à cette séparation des fichiers source. . Est-il possible de partager le type my défini avec d'autres fichiers source? . . .définitions de type de partage dans les fichiers source

Ceci est mon définitions myTypeDef.h

typedef struct 
{ 
    int x, y, w, h; 
    short life; 
}Man; 

si je crée un nouveau fichier .h (nommé draw.h) qui attirera l'image comme ceci:

#include "myTypeDef.h" 


void rendererFunction(Man *man); 

Ensuite, Je crée un fichier .c (nommé draw.c) qui mettra en œuvre ce qui est dans draw.h comme ceci:

#include "draw.h" 

void rendererFunction(Man *man) 
{ 
    draw(man->x, man->y, man->w, man->y); 
} 

Alors si je aussi crea té un fichier update.h (et update.c pour la mise en œuvre) qui mettra à jour sa position? Dois-je vraiment connecter le draw.h à update.h juste pour obtenir mon objet défini par type? Ou existe-t-il un autre moyen de partager un objet défini de type sans répéter la définition lorsque j'inclus les .h dans ma main?

J'espère que quelqu'un peut m'aider. Merci

+0

ok monsieur. Je vais essayer d'éditer et faire en sorte que cela soit aussi court que possible. Merci pour ce conseil. – Bicolano

+0

@KenWhite. Est-ce que ça va bien monsieur? J'espère que vous pouvez m'aider. Je suis juste confus avec ce nouveau concept que j'ai appris. La séparation des codes. – Bicolano

+0

Beaucoup mieux. Merci. :-) –

Répondre

0

Dans votre update.h, juste include "myTypeDef.h". Comme ce que vous faites avec draw.h et draw.c; Ou et update.h, utilisez simplement la phrase struct Man; pour déclarer la structure Et dans votre draw.c et update.c utilisez include "MyTypeDef.h".

+0

Non monsieur. Je pense que je ne peux pas faire cela parce que quand j'inclus le draw.h et update.h dans ma main, il y aura une répétition de la définition de mon "Man" .. d'où, l'erreur du compilateur. – Bicolano

1

Un idiome courant dans les fichiers d'en-tête c sont les gardes d'inclusion. Ceux-ci utilisent le préprocesseur pour empêcher des choses comme plusieurs définitions. Ils ressemblent à:

#ifndef MYMODULE_MYFILENAME_H 
#define MYMODULE_MYFILENAME_H 
.... Your definitions.... 
#endif 

Cela vous permet d'inclure toujours l'en-tête contenant ce un fichier donné utilise, même si un autre fichier se d'inclure également l'en-tête dont vous avez besoin. En effet, il s'agit d'une bonne pratique: si, plus tard, vous refactoriez un fichier d'en-tête pour ne plus inclure le fichier dont vous avez besoin, un code apparemment sans lien ne commence pas à ne pas compiler.