---
# System prepended metadata

title: Bien commencer un projet
tags: [Tips]

---

# ***Bien commencer un projet***


> Je tiens à ajouter que si vous n'avez pas envie de fonctionner comme ça, c'est comme vous voulez ! C'est juste des conseils pour ceux qui veulent les entendre !!!

Quand on commence le C *(ou d'ailleurs n'importe quel language cette partie s'applique à tous)*, il n'est pas toujours évident de savoir par où commencer un projet, alors voici un guide pour rendre le tout facile et compréhensible.


- ***Avoir un répo généralisé***

Vous allez commencer à savoir que refaire à chaques fois un nouveau dossier, en copiant à l'intérieur tous les dossiers/fichiers du type lib/ - include/ - src/ - Makefile - main.c et tout ce qui est important est une manip vachemant longue.

Pour ça, créer vous un dossier start/ dans votre delivery/ et mettez-y tous ces fichiers et faites en sorte de ***généraliser le plus possible ces derniers***, surtout pour le Makefile la lib et votre "my.h". Il y a une raison pour laquelle on l'apelle my.h, il doit être réservé pour vos fonctions de lib. Créer un .h spécifique à votre projet, pour y mettre vos ***structres***, ***defines*** et ***prototypes*** de fonctions est très important pour vous y retrouver.

Voici un répo d'exemple : 

- ***start***

    - ***lib/***

        - Makefile
        - vos fonctions de la lib
        - ***myPrintf/***
            - votre projet printf 

    - ***include/***

        - "lib.h"
        - "[nom de projet].h"

    - ***src/***
        - vos fonctions du projet
        - readFile.c
        - initStruct.c
        - handleErrors.c
        - tools.c
    - Makefile
    - main.c

> Séparer vos fonctions de lib avec votre projet printf est important pour vous retrouver plus facilement dans votre librairie principale.

Du coup, une fois que vous avez votre dossier start, vous n'aurez plus qu'à faire cette commande, une fois dans votre répo de nouveau projet *(c'est à dire 1 fois tous les 3 semaines - 1 mois)* : 

```bash
    $-->   cp -f ~/[userName]/delivery/start/* [votre projet]
```

Et voilà comment gagner un temps fou !

---

- ***Gérer vos fonctions généralisées***

Maintenant parlons structure de projet : 

Il y aura des fonctions dont vous aurez ***toujours besoin***. Comme une fonction ***readfile*** *(dépendant des fonctions/syscall permis)*, un fichier **tools.c** dans lequel vous mettrez toutes vos fonctions que vous utilisez souvent dans votre projet mais qui y dépendent, un ***main.c*** qui tient la route, un fichier ***initStruct.c*** parce qu'un projet sans structure c'est bien moins évident et un fichier ***handleErrors.c*** pour ne pas polluer vos fichiers d'algorythmique par des fonctions qui gèrent des erreurs.
<br>

src/readfile.c pourrait ressembler à ça : 
```c
[header EPITECH]

#include "../include/my.h"
#include "../include/[project name].h"

char **readFile(char *file)
{
    char *buffer;
    int fd = ...;
    
    ...;
    
    read(...);
    return myStrToWordArray(buffer);
}


char **freadFile(char *file)
{
    char *buffer;
    FILE *file = ...;
    
    ...;
    
    fread(...);
    return strToWordArray(buffer);
}


char **getlineFile(char *file)
{
    char **array;
    ssize_t readf;
    do {
        
        ...;
        
        getline(...);
    } while (...);
    return array;
}
```
<br>

Savoir utiliser ces 3 fonctions que sont ***read()***, ***fread()*** et ***getline()*** pour ouvrir un fichier, est un ***MUST*** pour les ***stumpers*** car chacune a sa spécifité et elles sont importantes à connaître en stumper.

src/initStruct.c pourrait ressembler à quelque chose comme ça  : 

```c
[header EPITECH]

#include "../include/my.h"
#include "../include/[project name].h"


/*

fonctions 
permettant
d'initialiser
votre
structure

*/


structName_t *initStruct(char **av)
{
    structName_t *structName = malloc(sizeof(structName_t));
    
    structName->... = ...;
    
    return structName;
}
```
<br>

votre main.c devrait ressembler à ça : 

```c 
[header EPITECH]

#include "include/my.h"
#include "include/[project name].h"

int core(structName_t *structName)
{
    // algorythm time >:)
    
    ...;
        
    if (PROBLEM)
        return 84;
    return 0;
}

int main(int ac, char **av, char **env (optionnel))
{
    if (ac != NUMBER OF ARGUMENTS || checkArguments(av) == 84)
        return 84;
    
    structName_t *structName = initStruct(av);
    return (core(structName));
}

```
et idem pour vos src/handleError.c et src/tools.c, vous avez compris le fonctionnement.

<br>

---

Maintenant, parlons Makefile

Voici un fichier Makefile qui est ***standard*** et qui ne vous fera pas trop suer. (renseignez vous sur la doc officielle Makefile il y a moyen de faire des trucs vachement stylé grâce à bash !)

> J'ai rajouté une petite fonctionnalité bien cool et super simple pour le coding-style ($--> make cs)
> Plus encore un texte qui s'affiche lorsque vous allez compiler

```bash

[header EPITECH]

NAME = nomDuProjet

SRC = lib/... # toutes les fonctions avec lesquelles on veut compiler
      src/...
      main.c

$(OBJ) = $(SRC:.c=.o) # on set la variable $(OBJ) qui équivaut à
                      # tous les .o et qui sera crée lors qu'on make

all : $(OBJ) # on lie tous les fichiers ensemble avec $(OBJ)
    gcc -o $(NAME) -g  $(OBJ) # on compile avec les infos importantes + -g pour pouvoir valgrind
    echo "\n\e[38;5;28m================ Compiling: Done   =======\
	=========\e[0;0m\n\n"
    # message stylé après la compilation

clean :
    rm $(OBJ) # on supprime les .o
    rm -f vgcore.* # les réponses valgrind
    echo "\n\e[38;5;39m================ Clean:     Done   =========\
	=======\e[0;0m\n\n"
     # message stylé après le clean

fclean : clean
    rm $(NAME) # l'éxecutable
    rm coding-style-reports.log # les log du coding-style
    rm -f vgcore.* # les réponses valgrind
    echo "\n\e[38;5;202m================ Fclean:    Done   ==========\
	======\e[0;0m\n\n"
     # message stylé après le fclean

re : fclean all

cs : fclean
    coding-style . .

.PHONY : clean fclean re # je sais plus comment on l'écrit c'est la
                         # mouli de stumper qui le veut absolument
 ______     __   __      ______   ______     ______     __    __     __     __   __     ______     __
/\  ___\   /\ \ / /     /\__  _\ /\  ___\   /\  == \   /\ "-./  \   /\ \   /\ "-.\ \   /\  __ \   /\ \
\ \ \____  \ \ \'/      \/_/\ \/ \ \  __\   \ \  __<   \ \ \-./\ \  \ \ \  \ \ \-.  \  \ \  __ \  \ \ \____
 \ \_____\  \ \__|         \ \_\  \ \_____\  \ \_\ \_\  \ \_\ \ \_\  \ \_\  \ \_\\"\_\  \ \_\ \_\  \ \_____\
  \/_____/   \/_/           \/_/   \/_____/   \/_/ /_/   \/_/  \/_/   \/_/   \/_/ \/_/   \/_/\/_/   \/_____/
  ______
 /\  ___\_
 \ \ \__\=\
  \ \______\
   \/______/
   
   echo " ______   ______   __    __  ______  __   __"
   echo "/\  ___\ /\  __ \ /\ "-./  \/\  == \/\ \ /\ \"
   echo "\ \ \____\ \ \_\ \\ \ \-./\ \\ \  _/\ \ \\ \ \____"
   echo " \ \_____\\ \_____\\ \_\ \ \_\\ \_\  \ \_\\ \_____\"
   echo "  \/_____/ \/_____/ \/_/  \/_/ \/_/   \/_/ \/_____/"
```

Maintenant que vous avez votre base de projet, vous n'avez plus qu'à vous renseigner sur des algorythmes existants pour savoir comment continuer votre projet dans les meilleures conditions, et c'est parti !




# ***compte rendu***


pas de desserts car coutent trop chers et sont trop durs a transporter

Noham, Noah, Mazouz dans les bus pour l'instant 

Max et Fahad pour les voitures a voir avec les 2

faire des groupes comme l'annee derniere pour les chambres d'ou l'importance que quelqu'un de venir avant le bus

demander a kaben et Kevin la question de la fille transexuelle.

faudra prevoir si les personnes dans le bus arrivent en premier il faudra etre rapide et efficace

on paye l'electricite l'eau et le gaz


## les activites : 


randonne dans la foret

samedi matin 8h => jogging 

etang et piscine (a preciser) apparement c'est le devis de l'annee derniere

a demander sur toutes les activites proposees sur le site
basket 
foot
escalade trop risquue

course d'orientation ? faire gaffe au flop

FAIRE UN SHEESH 
recuperer les archives de l'annee derniere
faire gaffe de pas faire chier les gens
si c'est nous c'est bon

course d'orientation dans la nuit / horror night (gare au flop)

si il fait chaud bataille d'eau (si la facture de l'eau est grande a ne pas faire)

demander a l'antre pour des animations