Modèles d'Utilisation Pratiques
Configuration et Initialisation
Configuration par Ligne de Commande
#include <iostream>
#include <string>
int main(int argc, char* argv[]) {
// Gestion de la configuration LabEx
std::string mode = "default";
if (argc > 1) {
mode = argv[1];
}
if (mode == "debug") {
std::cout << "Mode débogage activé" << std::endl;
} else if (mode == "production") {
std::cout << "Mode production activé" << std::endl;
}
return 0;
}
Stratégies de Gestion des Erreurs
graph TD
A[Validation des Entrées] --> B{Entrée Valide ?}
B -->|Oui| C[Traitement des Données]
B -->|Non| D[Retour Code Erreur]
D --> E[Sortie du Programme]
Rapports d'Erreurs Robustes
#include <iostream>
#include <fstream>
int main(int argc, char* argv[]) {
if (argc < 2) {
std::cerr << "Utilisation : " << argv[0] << " <nom_fichier>" << std::endl;
return 1;
}
std::ifstream file(argv[1]);
if (!file.is_open()) {
std::cerr << "Erreur : Impossible d'ouvrir le fichier " << argv[1] << std::endl;
return 2;
}
// Logique de traitement du fichier
return 0;
}
Conventions de Codes de Sortie
Code de Sortie |
Signification |
Scénario |
0 |
Succès |
Exécution normale |
1 |
Erreur générale |
Échec non spécifié |
2 |
Mauvaise utilisation des commandes |
Utilisation incorrecte |
126 |
Problème d'autorisation |
Impossible d'exécuter |
127 |
Commande introuvable |
Commande invalide |
Modèles d'Initialisation Avancés
Injection de Dépendances
class ConfigManager {
public:
static ConfigManager& getInstance(int argc, char* argv[]) {
static ConfigManager instance(argc, argv);
return instance;
}
private:
ConfigManager(int argc, char* argv[]) {
// Initialisation avec les arguments de ligne de commande
}
};
int main(int argc, char* argv[]) {
auto& config = ConfigManager::getInstance(argc, argv);
// Utilisation de la configuration
return 0;
}
Compilation et Exécution sous Ubuntu 22.04
## Compiler le programme
g++ -std=c++11 -o config_demo main.cpp
## Exécuter avec différents modes
./config_demo debug
./config_demo production
Bonnes Pratiques pour les Développeurs LabEx
- Valider toujours les entrées
- Utiliser des codes de sortie significatifs
- Fournir des messages d'erreur clairs
- Prendre en charge une configuration flexible
- Gérer les cas limites avec élégance
- Minimiser les frais d'initialisation
- Utiliser l'initialisation statique lorsque possible
- Éviter la logique complexe dans la fonction principale
- Déléguer les responsabilités aux classes appropriées
Conclusion
La maîtrise des modèles de la fonction main()
permet aux développeurs de créer des applications C++ robustes, flexibles et maintenables dans l'écosystème LabEx.