Table des matières
Découverte de C++
Voici quelques exemples pour que vous puissiez faire vos premiers pas en C++.
Hello World!
Commençons pas le classic “hello word!”. Copier/coller le code ci-dessous dans le fichier “hello.cpp”
#include <iostream> int main (int argc, char **argv, char **envp) { std::cout << "hello word!" << std::endl; // using namespace std; // cout <<"hello word!" <<endl; return 0; // return 1; }
Créez dans le même répertoire un fichier “compile.sh”
#!/bin/bash cd `dirname $0` g++ hello.cpp -o hello.out if ./hello.out then echo "pas de code d'erreur ($?)" else echo "code d'erreur = $?" fi
Pensez à rendre exécutable le programme par :
chmod a+x compile.sh
Puis à lancer la compilation :
./compile.sh
Les commentaires ont deux formes :
/* par bloc pour la mise au point par exemple */ // ou en fin de ligne
Jouez avec les commentaires qui sont proposés.
Il ne peut y avoir qu'une fonction main dans un programme C++.
Arguments
Mais à quoi servent les arguments de cette fonction ?
Pour le savoir faisons un affichage des paramètres. Voici le programme “args.cpp”
#include <iostream> using namespace std; int main (int argc, char **argv, char **envp) { for (int i = 0; i < argc; ++i) cout << "argv [" << i << "]: " << argv [i] << endl; cout << endl; for (; *envp; ++envp) //if (**envp == 'H') cout << *envp << endl; return 0; }
Compilez avec
g++ args.cpp
Si vous n'utilisez pas l'option “-o” votre programme se nommera par défault “a.out”.
Exécutez avec
./a.out A B C D
De nouveau, jouez avec les commentaires.
Mise au point
Il existe un outil de mise au point des programmes écrits en C ou C++ : gdb.
Il faut au préalable avoir compilé le vôtre avec l’option “-g”. Au moment de l’exécution, faîtes précéder la commande shell de “gdb - -args”.
gdb --args ./a.out A B C D
Voici quelques commandes :
- Vous pouvez placer un point d'arrêt avec “break args.cpp:6”
- Attendre le prompt gdb et saisissez “run”.
- La commande “where” permet de savoir où l’on se trouve dans la pile d’exécution.
- La commande “frame n” permet de se placer dans la pile d’exécution.
- Il est possible d’afficher des valeurs des variables avec la commande “print”.
Toutes ces actions peuvent être réalisées sous emacs:
- M-x shell : ouvre un terminal
- M-x compile : lance une compilation avec un lien direct avec les erreurs
- M-x gdb : lance la mise au point et l'observation d'un programme
Exemple de lambda
Voici un exemple de fonction lambda. Notez l'utilisation de “template” pour désigner le passage d'une lambda en paramètre.
#include <iostream> #include <iomanip> #include <boost/chrono.hpp> using namespace boost::chrono; using namespace std; template <typename Funct> void mesure (const int &max, const Funct &lambda) { auto start = high_resolution_clock::now (); for (int i = 0; i < max; ++i) lambda (i); duration<double> ns ((high_resolution_clock::now ()-start).count ()); auto h = duration_cast<hours> (ns); ns -= h; auto m = duration_cast<minutes> (ns); ns -= m; cout.fill ('0'); cout << "last: " << setw (2) << h.count () << ":" << setw (2) << m.count () << ":" << setw (9) << fixed << setprecision (6) << ns.count () << endl; } int main (int argc, char **argv, char **envp) { int sum; mesure (10, [&sum] (int x) { sum += x; }); cout << "sum: " << sum << endl; }
Pour compiler, il faut ajouter la bibliothèque des fonctions boost.
g++ -g -lboost_chrono -lboost_system lambda.cpp
Jouez avec les paramètres de la fonction lambda, son corps ou le contexte des variables extérieurs utilisables dans la lambda.
De la documentation supplémentaire se trouve sur :