quiz Programmation · 20 questions

Gestion de projets C++/Python et Git

help_outline 20 questions
timer ~10 min
auto_awesome Généré par IA
0 / 20
Score : 0%
1

Quel est l'ordre correct des étapes de compilation C++ avant la génération du fichier exécutable ?

2

Dans un Makefile, quelle cible est exécutée lorsqu'on lance simplement la commande `make` sans argument ?

3

Quel drapeau g++ permet d'activer les messages d'avertissement pendant la compilation ?

4

Quel fichier doit être ajouté au dépôt pour empêcher Git de versionner les fichiers temporaires et les configurations locales ?

5

Lors d'une fusion (`git merge`) de la branche `feature` dans `master`, quel type de commit est créé si aucun conflit n'apparaît ?

6

Quel est le rôle principal d'un `guard` (`#pragma once`) dans un fichier d'en‑tête C++ ?

7

Dans le cadre d'un projet C++ multi‑fichiers, quel fichier contient généralement les définitions des fonctions déclarées dans le header ?

8

Quel est l'avantage principal d'utiliser CMake plutôt que d'écrire directement un Makefile à la main ?

9

Quel type de test unitaire vérifie le bon fonctionnement d'une fonction qui détermine si une personne est majeure ?

10

Quel est le résultat de la commande `git status` lorsqu'un fichier a été modifié mais pas encore ajouté à l'index ?

11

Dans un projet Python, quelle bibliothèque standard fournit le débogueur interactif `pdb` ?

12

Quel est le rôle d'un `branch` dans Git ?

13

Quel type d'événement pygame correspond à la fermeture de la fenêtre par l'utilisateur ?

14

Dans SFML, quelle méthode doit être appelée pour libérer le contenu de la fenêtre avant de dessiner de nouveaux éléments ?

15

Quel est l'avantage principal d'utiliser le mode « just‑in‑time compilation » pour un langage interprété comme Python ?

16

Quel est le résultat attendu de la fonction `positif(-1)` dans l'exemple de test unitaire fourni ?

17

Quel est le principe de base d'un « pair programming » tel que décrit dans le texte ?

18

Quel fichier CMakeLists.txt ajoute l'option de compilation `-Wall` à tous les fichiers du projet ?

19

Lorsqu'un développeur veut revenir à la version précédente d'un fichier sans perdre l'historique, quelle commande Git doit‑il utiliser ?

20

Quel est le type d'événement SFML qui indique qu'une touche du clavier a été enfoncée ?

menu_book

Gestion de projets C++/Python et Git

Révise les notions clés avant de passer le quiz

Introduction à la gestion de projets C++/Python et Git

Dans le monde du développement logiciel, la maîtrise du processus de compilation, des outils de build comme Make ou CMake, ainsi que des pratiques de versionnage avec Git est indispensable. Cet article reprend les concepts clés testés dans le quiz « Gestion de projets C++/Python et Git » et les développe en profondeur afin d’aider les développeurs débutants ou intermédiaires à consolider leurs connaissances.

Les étapes de compilation d’un programme C++

Ordre correct des phases de compilation

Le compilateur C++ suit un pipeline strict avant de produire le fichier exécutable. L’ordre correct est :

  • Préprocessing : remplacement des macros, inclusion des fichiers d’en‑tête, gestion des directives #include et #define.
  • Analyse lexicale : le texte pré‑traité est découpé en tokens (identifiants, littéraux, opérateurs, etc.).
  • Analyse syntaxique : construction d’un arbre syntaxique abstrait (AST) qui représente la structure du code.
  • Analyse sémantique : vérification du sens du programme (types, portée, conversions, etc.).
  • Génération de code assembleur : transformation de l’AST en instructions assembleur spécifiques à l’architecture cible.
  • Traduction en binaire : l’assembleur produit du code objet qui est lié pour former l’exécutable final.

Cette séquence peut être comparée à la préparation d’une recette : le chef prépare d’abord les ingrédients (préprocessing), les coupe (lexicale), les assemble selon la recette (syntaxique), vérifie que la recette a du sens (sémantique), cuisine le plat (assembleur) et enfin le sert (binaire).

Makefile : la cible par défaut

Quel est le comportement de la commande make sans argument ?

Lorsque vous lancez simplement make, l’outil recherche la première cible définie dans le fichier Makefile. Cette cible devient la cible par défaut et est exécutée automatiquement. Il n’est pas nécessaire de nommer explicitement all ou clean ; c’est l’ordre d’apparition qui prime.

Exemple typique :

all: prog

prog: main.o utils.o
	g++ -o prog main.o utils.o

clean:
	rm -f *.o prog

Dans cet exemple, la cible all est la première et sera donc exécutée lorsqu’on tape make sans argument.

Options de compilation avec g++

Activer les messages d’avertissement

Le drapeau -Wall ("all warnings") indique au compilateur d’afficher la plupart des avertissements possibles. Il aide à détecter des problèmes potentiels avant même que le programme ne s’exécute.

Exemple d’utilisation :

g++ -Wall -O2 -std=c++17 -o mon_programme source.cpp

En combinant -Wall avec -Werror, vous pouvez transformer chaque avertissement en erreur de compilation, ce qui impose un code encore plus propre.

Gestion de version avec Git

Le fichier .gitignore

Pour éviter que des fichiers temporaires, des artefacts de compilation ou des configurations locales ne polluent le dépôt, on crée un fichier nommé .gitignore à la racine du projet. Chaque ligne décrit un motif à ignorer.

Exemple de .gitignore typique pour un projet C++ :

# Fichiers objets et exécutables
*.o
*.exe

# Répertoires de build
build/

# Configurations d’IDE
*.vcxproj
*.idea/

Git ignore automatiquement les fichiers correspondants, ce qui maintient le dépôt propre et facilite la collaboration.

Fusion de branches avec git merge

Lorsque vous fusionnez la branche feature dans master et qu’aucun conflit n’apparaît, Git crée un commit de merge à deux parents. Ce commit conserve l’historique des deux branches et indique clairement le point de jonction.

Si la fusion peut être réalisée en fast‑forward (c’est‑à‑dire que master pointe déjà sur le même commit que feature), Git avance simplement le pointeur master sans créer de nouveau SHA. Cependant, dans la plupart des workflows collaboratifs, on désactive le fast‑forward afin d’obtenir un commit de merge explicite.

Bonnes pratiques en C++

Le garde‑d’en‑tête #pragma once

Le garde‑d’en‑tête, souvent écrit sous la forme #pragma once, empêche l’inclusion multiple du même fichier d’en‑tête dans une unité de traduction. Sans ce mécanisme, le même symbole pourrait être déclaré plusieurs fois, entraînant des erreurs de compilation.

Alternative classique : les macros d’inclusion conditionnelle (#ifndef HEADER_H … #define HEADER_H … #endif), mais #pragma once est plus lisible et légèrement plus rapide à traiter par le préprocesseur.

Organisation des fichiers source et header

Dans un projet multi‑fichiers, chaque .h (ou .hpp) contient les déclarations de classes, fonctions et constantes, tandis que le fichier .cpp correspondant implémente les fonctions déclarées. Cette séparation facilite la compilation incrémentale et réduit les temps de rebuild.

Exemple :

// math.hpp
#ifndef MATH_HPP
#define MATH_HPP

int add(int a, int b);

#endif // MATH_HPP

// math.cpp
#include "math.hpp"

int add(int a, int b) {
    return a + b;
}

Le Makefile ou CMakeLists.txt indique que math.cpp dépend de math.hpp, ce qui permet au système de build de ne recompiler que les fichiers réellement modifiés.

CMake : un générateur de build moderne

Pourquoi choisir CMake plutôt qu’un Makefile écrit à la main ?

CMake offre une portabilité multi‑plateforme : le même CMakeLists.txt peut générer des Makefiles sous Linux, des projets Visual Studio sous Windows, ou des Xcode projects sous macOS. Il gère automatiquement les dépendances, les chemins d’inclusion et les options de compilation, ce qui réduit les erreurs humaines.

De plus, CMake possède une communauté active, de nombreux modules (FindBoost, FindPython, etc.) et s’intègre facilement aux systèmes d’intégration continue comme GitHub Actions ou GitLab CI.

Exemple minimal de CMakeLists.txt :

cmake_minimum_required(VERSION 3.15)
project(MonProjet LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(mon_exe main.cpp math.cpp)

En exécutant cmake -S . -B build && cmake --build build, CMake crée le répertoire build contenant le système de build adapté à votre plateforme.

Conclusion

Maîtriser le pipeline de compilation C++, les outils de build comme Make et CMake, ainsi que les bonnes pratiques de gestion de version avec Git constitue le socle d’un développement efficace et fiable. En appliquant les concepts présentés – ordre de compilation, cible par défaut du Makefile, drapeaux d’avertissement g++, utilisation du .gitignore, compréhension du commit de merge, protection des headers avec #pragma once, séparation source/header, et les avantages de CMake – vous serez mieux armé pour mener à bien des projets C++/Python de petite ou grande envergure.

Arrête de surligner.
Commence à apprendre.

Rejoins les étudiants qui ont déjà généré plus de 50 000 quiz sur Quizly. C'est gratuit pour démarrer.