Outils pour utilisateurs

Outils du site


langage:debut

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.

langage/debut.txt · Dernière modification: 13/01/2019 08:38 par webmestre