Des notes persos pour la programmation.
Raccourcis de vscode, de vim, de terminal et autres tips utiles.
git branch nom : cree une nouvelle branche
git checkout nom : switch de branche
git add nom_fichier : ajoute un fichier
git commit -m "message" : enregistre les modifications en local
git push : enregistre sur le distant
git pull : recupere la branch main avec les modifications
git merge nom : assemble une branche (nom) avec la branche actuelle
git revert HEAD^ : pour annuler le dernier commit commite
Si on a add un fichier qu'on ne voulait pas : git stash, puis creer une nouvelle branche et aller dedans, puis git stash list pour avoir la liste de ce qui a ete sauvegarder, recopier l'identifiant et faire git stash apply stash@{0} par exemple.
Si on a commit des fichiers depuis la mauvaise branche, alors il faut recuperer l'identifiant du dernier commit grace a git log, faire git reset --hard HEAD^ pour supprimer le dernier commit de la branche, creer une nouvelle branche et aller dedans puis faire git reset --hard id, avec id l'identifiant du commit.
Si on veut modifier un message de commit : git commit --amend -m "nouveau message"
Si on veut rajouter des fichiers dans le commit : git add fichier, puis git commit --amend --no-edit
ctrl-shift-E sépare la fenêtre actuelle en une nouvelle fenêtre verticale
ctrl-shift-O sépare la fenêtre actuelle en une nouvelle fenêtre horizontale
ctrl-shift-W ferme la fenêtre actuelle
ctrl-shift-N (Next) prochaine fenêtre
ctrl-shift-P (Previous) fenêtre précédente
ctrl-shift-X Passe en plein écran la fenêtre actuelle (faire pareil pour revenir comme avant)
alt-fleche déplace une ligne (en haut ou en bas)
ctrl-maj-k supprime une ligne
ctrl-/ ajoute / supprime un commentaire à la ligne
ctrl-maj-a ajoute un ensemble de commentaire
ctrl-p aller au fichier
ctrl-tab aller au fichier suivant
ctrl-w fermer le fichier en cours
ctrl-\ fractionner l'éditeur
ctrl-1 aller sur le groupe 1
ctrl-2 aller sur e groupe 2
ctrl-` aller sur le terminal
Pour mettre les tabs par défaut : ctrl+, => affiche les options
Décocher dans espace de travail Editor: Insert Spaces
I insert mode
:x enregistre et quitte
:w enregistre
:wq enregistre et quitte (equivalent à :x)
:q quitte
yy copier une ligne
p coller la ligne précédemment copiée
^ début de ligne
$ fin de ligne
gg début du fichier
G fin de fichier
shift + V sélectionne une ligne (retaper pour retirer)
all make par defaut
clean supprime les .o
fclean supprime les .o et l'éxécutable / biblio
re comme fclean et re make derrière
.PHONY évite d'appeler un fichier qui se nomme pareil qu'une règle
"VAR :=" définit la constante VAR
$(VAR) utilise la variable VAR
CC := pour le compilateur (cc, clang, gcc, g++ ...)
CFLAGS := pour les flags (-Wall -Werror -Wextra ...)
CPPFLAGS := pour les flags en C++
NAME := nom de l'éxecutable créé
SRCS := tous les fichiers sources utiles pour créer l'éxec
OBJ := tous les objets créent à partir de SRCS
%.c fait référence à tous les fichiers .c (idem pour %.o)
$< fait réference à la source de la règle
$@ fait réference au(x) résultat(s) de la règle
SRCS := $(addprefix $(SRCS_D), $(addsuffix .c, $(SRCS_F)))
^ ^__ ajoute le suffixe .c à la constante SRCS_F. Donc ajoute .c à tous les fichiers étant définit dans SRCS_F
|__ ajoute le prefix contenu dans SRCS_D, dans l'exemple : "srcs/"
Ce qui fabrique les chemins suivants : srcs/file1.c, srcs/file2.c, srcs/file3.c et srcs/main.c
Idem avec OBJ en remplacant .c par .o dans l'addsuffixCC := cc
CFLAGS := -g -Wall -Wextra -Werror
NAME := name
SRCS_D := srcs/
LIBFT_D := $(SRCS_D)/libft
SRCS_F := file1 file2 file3 ... main
SRCS := $(addprefix $(SRCS_D), $(addsuffix .c, $(SRCS_F)))
OBJ := $(addprefix $(SRCS_D), $(addsuffix .o, $(SRCS_F)))
all: $(NAME)
$(NAME): $(OBJ)
make -C $(LIBFT_D)
mv $(LIBFT_D)/libft.a .
ar rcs $(NAME) $(OBJ) <-- facultatif, seulement pour créer une biblio
$(CC) $(CFLAGS) $(OBJ) -L. -lft -o $(NAME) <-- pour créer un exec
clean:
rm -f $(OBJ)
fclean: clean
rm -f $(NAME)
make fclean -C $(LIBFT_D)
re: fclean all
.PHONY: all clean fclean re bonusPreprocessing : crée des fichiers temporaires
Compilation : crée les .o à partir de ces fichiers temporaires
Edition des liens: crée l'executable à partir des .o
Preprocessing + Compilation gcc -c file.c --> sort un file.o
Edition des liens gcc -o exec file.o --> sort exec
-c compile mais ne lie pas
-o permet l'édition des liens et de nommer le fichier executable
-g permet le debuging
-l cherche une librairie
-L cherche le dossier d'une librairie
-I cherche le dossier des headers (.h)
-Werror tous les warnings deviennent errors
-Wall affiche tous les warnings
-Wextra affiche d'autres warnings non géré par -Wall
-fsanitize=thread -g
-fsanitize=address -g
fsanitize ne doit pas etre utilise en meme temps que valgrind
--leak-check=full : Voir toutes les fuites
--track-origins=yes : Trouver l'origine des variables non initialisées.
--tool=helgrind : Detecte les erreurs de synchronisation dans les threads
--tool=drd : Detecte les erreurs dans les threads
--child-silent-after-fork=yes : ne montre pas les erreurs de leaks dans les processus fils.
--suppressions=FILENAME : supprime les leaks depuis un fichier
valgrind --leak-check=full --show-leak-kinds=allvalgrind --track-fds=yes --leak-check=full --show-leak-kinds=all --trace-children=yesvalgrind --leak-check=full --show-leak-kinds=all --trace-children=yes --track-origins=yes --track-fds=yes --suppressions=readline.suppvalgrind --track-fds=yes --leak-check=full --show-leak-kinds=all --child-silent-after-fork=yesvalgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --tool=helgrind --tool=drd --trace-children=yes --track-fds=yes