La programmation en C++ moderne

Apprenez la programmation de zéro jusqu'à l'infini !

a marqué ce sujet comme résolu.

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Au programme, on a avancé sur la partie III et on a fait quelques corrections mineures pour faire valider la partie II.

Merci d’avance pour vos commentaires.

+0 -0

Salut! :) Compilation

Le fichier objet ne sera pas pareil selon qu’on compile sous Windows ou GNU/Linux

en plus de amd64/i686/avr/etc… aussi

Dans le cas de Visual Studio, sont présents dans le dossier de sortie. Dans le cas de GCC et Clang, il faut utiliser l’option -c lors de la compilation.

Pour VS vous dites où ils sont alors que pour GCC/Clang vous donnez l’option de compilation

Conversion entre types

Ainsi, convertir un double en int entraîne une perte d’information. C’est un peu comme vouloir transvaser de l’eau depuis un seau ver un verre

Release et Debug

Avec GCC et Clang, c’est l’option de compilation -O2 qu’il faut passer. Celle-ci cherche à optimiser le programme pour rendre son exécution plus rapide

ça pourrait être bien de mettre une liste des -O** du genre

  • O2 ==> moins d’espace (en fin je crois que c’est ça)
  • O2 ==> vitesse
  • O3 ==> informations pour le débug

g++ -std=c++17 -Wall -Wextra -O2 test.cpp -o test.out

test.o non ? car le .out c’est genre pour GProf non ? (ou d’autres trucs GNU)

Une question de symboles — Après la 2e analyse

Ce sont des symboles qui sont ne sont pas définis dans notre fichier objet.

Duplication

Schéma récapitulatif
Vous faites les schémas (et icones des tutos) avec ce thème comme ça ?

Voilà c’est tout pour cette fournée (de nouveau) ;)

Merci pour tes retours. :)

Dans le cas de Visual Studio, sont présents dans le dossier de sortie. Dans le cas de GCC et Clang, il faut utiliser l’option -c lors de la compilation.

Pour VS vous dites où ils sont alors que pour GCC/Clang vous donnez l’option de compilation

Vanadiae

C’est parce que les fichiers objets sont générés automatiquement avec Visual Studio. Et pour GCC/Clang, ils seront générés dans le dossier courant.

Conversion entre types

Ainsi, convertir un double en int entraîne une perte d’information. C’est un peu comme vouloir transvaser de l’eau depuis un seau ver un verre

Vanadiae

Merci.

Release et Debug

Avec GCC et Clang, c’est l’option de compilation -O2 qu’il faut passer. Celle-ci cherche à optimiser le programme pour rendre son exécution plus rapide

ça pourrait être bien de mettre une liste des -O** du genre

  • O2 ==> moins d’espace (en fin je crois que c’est ça)
  • O2 ==> vitesse
  • O3 ==> informations pour le débug
Vanadiae

Tu as de O1 à O3 qui optimisent de plus en plus pour une vitesse accrue, Og pour une optimisation du débogage et Os pour optimiser la taille de l’exécutable. Voir SO.

g++ -std=c++17 -Wall -Wextra -O2 test.cpp -o test.out

test.o non ? car le .out c’est genre pour GProf non ? (ou d’autres trucs GNU)

Vanadiae

GProf ? C’est quoi ? Le .out ça marche parfaitement sous GNU/Linux.

Une question de symboles — Après la 2e analyse

Ce sont des symboles qui sont ne sont pas définis dans notre fichier objet.

Duplication

Vanadiae

Corrigé merci.

Schéma récapitulatif
Vous faites les schémas (et icones des tutos) avec ce thème comme ça ?

Vanadiae

Oui, on fait dans le style ZdS parce que j’aime bien. ^^

GProf c’est dans le même genre que Valgrind : c’est un outil de profilage.

EDIT: Tu rajoutes l’option -pg à la compilation et tu lances gprof avec le gmon.out

Pour ma dernière remarque sur les schémas, vous les faites avec quoi ? (je compte peut-être faire des articles/tutos/billets :) )

+0 -0

Salut à tous,

Au programme, le chapitre sur la compilation est terminé et le chapitre sur le débogage est bien avancé. Il ne reste que des exercices à écrire. Le but serait de faire pratiquer le débogage en donnant des codes dont il faut donner les variables à certains moments, afficher la stack trace, etc. J’aurais bien donné des codes volontairement incorrects, mais sans allocation dynamique ni pointeur nu, je n’ai pas d’idée de plantage qui serait suffisamment subtil pour ne pas être découvert simplement en lisant le code. Si vous avez une idée, je prends. :)


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Merci pour tes retours @Vanadiae, ça fait très plaisir de voir que tu participes régulièrement à la bêta. :)

Chasse aux bugs!

Ainsi, si je suis à la ligne 9 et que le fais next 3, j’avancerai de trois lignes.

Pourtant quand tu es ligne 9, tu passes à la 14 alors que 9+3 = 12 ???

Vanadiae

En fait, ce n’est pas trois lignes, mais trois instructions. Comme la ligne 10 est vide, celle-ci ne compte pas. Donc on a 11 et 12 qui sont sautées, 13 est vide, donc on arrive à la 14. Je corrige les explications.

Aller plus loin

Lien vers OC ?

Vanadiae

Oui. ^^

Je peux aider pour l’exo aussi ;)

Vanadiae

Volontiers. Que veux-tu faire ?

On pourrait faire un exo avec des erreurs du genre

int main()
{
  int* foo;
  *foo = 152; //SIGSEGV
  return 0;
}

et les laisser les trouver en débuggant (bon mon cas est un extrême et pas très moderne mais bon… j’ai pas d’autre idée pour le moment)

EDIT: tu es pas banni de OC (cf. ton blog) ?

+0 -0

Oui pour les pointeurs c’est ça le truc mais après on peut trouver d’autres choses à débugger

Être banni d’OC n’empêche pas de mettre un lien vers un de leurs cours. Surtout que celui-ci vient droit du Site du Zéro. Et puis ce ban c’est vieux, maintenant je ne suis plus aigri, juste indifférent. :)

informaticienzero

C’est mieux d’être indifférent, c’est sûr.

;)

EDIT:

Merci pour tes retours @Vanadiae, ça fait très plaisir de voir que tu participes régulièrement à la bêta. :)

Moi aussi ;)

+0 -0

J’aurais bien donné des codes volontairement incorrects, mais sans allocation dynamique ni pointeur nu, je n’ai pas d’idée de plantage qui serait suffisamment subtil pour ne pas être découvert simplement en lisant le code. Si vous avez une idée, je prends. :)

Un itérateur invalidé après un insert/erase ? Pour un débutant ça reste discret mais pas sûr que ça soit quelque chose de visible dans le débugger. Vu qu’on doit éviter les pointeurs nus, peut-être se tourner vers les manipulations de conteneurs plutôt. :)

Salut à tous.

Je n’ai qu’un exercice sur le débogage, d’autres viendront surement plus tard, mais là j’avoue que je n’ai pas d’inspiration. En attendant, j’ai commencé le chapitre sur les bibliothèques externes. La partie SFML est terminée, la partie sur Boost j’attends que ça finisse de compiler chez moi. :)

Le but est de montrer qu’installer des bibliothèques externes n’est pas compliqué et qu’on peut vite faire des choses marrantes en C++, comme des programmes en fenêtre.


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Au programme : principalement l’ajout d’une ébauche de plan pour la POO. Nous mettons en beta pour que vous nous proposiez avis et suggestions sur ce plan. C’est là qu’on marche sur des œufs, faut pas se planter sur la POO. D’où l’importance de vos retours ! :)

Sinon, l’interlude sera bientôt fini, nous attendons donc aussi vos retours pré-validation, même si c’est du contenu bien moins critique que la POO.

Merci d’avance pour vos commentaires !

EDIT : A noter que les principes SOLID et autres principes de base de la POO seront distillés au fur et à mesure que l’on avance dans la partie. Je pense éventuellement ajouter un chapitre-récap où on revient dessus pour prendre un peu de recul sur ces concepts.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte