# ***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