[C] allégé mon main.c

Es0pe Messages postés 94 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir,
Voila m'étant lancé dans un petit projet je commence a avoir un main.c assez ... chargé. J'ai déjà mis mes variables dans un .h mais je voulais savoir comment mettre une partie de programme dans un autre fichier

exemple :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include "variable.h"


 
void pause();

int main(int argc, char *argv[])
{
mon programme 

"j'appelle la partie qui est dans un autre fichier (une boucle while un peu longue par exemple"

et hop je continue le programme
} 


et je voudrais savoir aussi comment l'appelée

Merci
A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,

Les variables dans un .h, c'est pas super.
En fait, ce qu'il faut faire, ce sont des fonctions. Dès que tu peux encapsuler un savoir-faire, tu crées une fonction. Et cette fonction, tu l'appelles d'où tu veux, de ton main par exemple. Par la suite, tu peux être amené à faire plusieurs fichiers. Un fichier regroupera logiquement des fonctions ayant un rapport. Toutes les fonctions d'un fichier susceptible d'être appelées à partir d'un autre devront être recensées dans son .h, tous les autres pourront être utilisés en static.

Cdlt
0
OnlyDraft Messages postés 121 Date d'inscription   Statut Membre Dernière intervention   15
 
slt;

rien de plus simple;

tu met ton code dans un .h, exemple traitement.h

tu fait une sorte de fonction

void toto ()
{

ici tu met ton traitement

}


dans ton main.c tu fait

#include "traitement.h"

et quand tu appel ta fonction de traitement tu fais simplement:

toto ();


et voila!
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Non !!!
Pas de code dans un .h, juste les prototypes.
0
Es0pe Messages postés 94 Date d'inscription   Statut Membre Dernière intervention   2
 
Ouaip j'avais déjà fait ça sauf qu'il me met une erreur :

6 C:\...\deplacement.h:4,               from jeu.c In file included from deplacement.h:4,               from jeu.c 


0
OnlyDraft Messages postés 121 Date d'inscription   Statut Membre Dernière intervention   15
 
il est bien bo le message d'erreur mais c'est plutôt le code qu'il faut!!
0

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

Posez votre question
Es0pe Messages postés 94 Date d'inscription   Statut Membre Dernière intervention   2
 
Main.c:

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include "variable.h"
#include "deplacement.h"


 
void pause();

int main(int argc, char *argv[])
{
    
    int continuer = 1;
    
    position.x=400;
    position.y=0;

    SDL_Init(SDL_INIT_VIDEO);
    

    ecran = SDL_SetVideoMode(900, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
   
    void deplacement ()
    
    SDL_EnableKeyRepeat(10, 10);
    
   while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    
                    case SDLK_UP: 
                        if (positionarbre1.y <600 && positionarbre.y > 600  )
                           positionarbre1.y=positionarbre1.y+10, positionarbre.y=0;
                        else if (positionarbre1.y>600 && positionarbre.y < 600)
                             positionarbre1.y =0, positionarbre.y=positionarbre.y+10;
                        else if (positionarbre.y >600 && positionarbre1.y>600)
                            positionarbre1.y=0, positionarbre.y=0;
                        else
                            positionarbre1.y=positionarbre1.y+10, positionarbre.y=positionarbre.y+10,;
                        break;
                    
                    case SDLK_LEFT:
                         if (positionVoiture.x > 0)
                            positionVoiture.x = positionVoiture.x - 10;
                         else 
                            positionVoiture.x = 0;
                         break;
                    case SDLK_RIGHT:
                         if (positionVoiture.x < 850)
                            positionVoiture.x = positionVoiture.x+10;
                         else
                             positionVoiture.x = 850;
                         break;
                        
                }
                break;
        }
 
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(arbre1, NULL, ecran, &positionarbre1);
        SDL_BlitSurface(arbre, NULL, ecran, &positionarbre);
        SDL_BlitSurface(voiture, NULL, ecran, &positionVoiture);
        SDL_BlitSurface(arbre, NULL, ecran, &positionarbre2);
        SDL_Flip(ecran); 
    }

    SDL_FreeSurface(voiture);
    SDL_Quit();

    return EXIT_SUCCESS;

}




 
void pause()
{
    int continuer = 1;
    SDL_Event event;
 
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}


deplacement.h :

 #include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include "variable.h"
 
 void deplacement()
 {
    voiture = SDL_LoadBMP("skieur.bmp");
    SDL_SetColorKey(voiture, SDL_SRCCOLORKEY, SDL_MapRGB(voiture->format, 255, 255, 255));
    positionVoiture.x=450;
    positionVoiture.y=500;
    
    SDL_BlitSurface(voiture, NULL, ecran, &positionVoiture);
    
    arbre1 = SDL_LoadBMP("arbre.bmp");
    SDL_SetColorKey(arbre1, SDL_SRCCOLORKEY, SDL_MapRGB(arbre1->format, 255, 255, 255));
    positionarbre1.x=250;
    positionarbre1.y=140;
    
    SDL_BlitSurface(arbre1, NULL, ecran, &positionarbre1);
    
    arbre = SDL_LoadBMP("arbre.bmp");
    SDL_SetColorKey(arbre, SDL_SRCCOLORKEY, SDL_MapRGB(arbre->format, 255, 255, 255));
    positionarbre.x=750;
    positionarbre.y=350;
    
    SDL_BlitSurface(arbre, NULL, ecran, &positionarbre);
    
    arbre2 = SDL_LoadBMP("arbre.bmp");
    SDL_SetColorKey(arbre2, SDL_SRCCOLORKEY, SDL_MapRGB(arbre2->format, 255, 255, 255));
    positionarbre2.x=700;
    positionarbre2.y=30;
    
    SDL_BlitSurface(arbre2, NULL, ecran, &positionarbre1);
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Relis mon poste 1. Pas de code dans un .h.
Dans mon poste 1, je t'ai expliqué la méthode à adopter ;).
0
Es0pe Messages postés 94 Date d'inscription   Statut Membre Dernière intervention   2
 
Donc si je résume ... je laisse tout dans le main.c sauf que je fais des fonctions en plus :/ ... ça va vraiment l'allégé ? :s
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ce n'est pas ce que j'ai dit dans le poste 1.
J'ai dit, que tu fais plusieurs fichiers .c qui vont contenir des fonctions. Les fonctions seront des entités englobant un savoir-faire. Toutes les fonctions qui ont une utilité en dehors du fichier doivent être recensées dans leur .h (leur prototype, pas leur code).
Au final, tu peux avoir toto.c, toto.h (son en-tête associé), titi.c, titi.h et main.c.
Ton main appellera les différentes fonctions. Il sera donc allégé. Le main grosso modo est le chef d'orchestre de tes fonctions (si je puis dire ça ainsi ^^).
0
legulysse Messages postés 121 Date d'inscription   Statut Membre Dernière intervention   15
 
Pour compléter, un mini exemple :

-> traitement.h

void GestionClavier(...);    //declaration de la fonction

-> traitement.cpp

#include "traitement.h"
void GestionClavier(...)    //implémentation de la fonction
{
    //code
}

-> main.cpp

#include "traitement.h"
void main()
{
    GestionClavier();    //utilisation de la fonction
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui.
Je rajouterais qu'en C, les extensions il faut mettre .c.
Et le prototype du main est :
int main(void);
et non void main(void).
0