[Mes 2 cents de bon sens] Voir le C++ et mourir. Voir Visual Studio et remourir.
Salut à tous! Je me suis remis un peu dans la programmation, ayant quelques idées qui peuvent se révéler suicidaires.
J’ai appris à coder avec le C et l’orienté objet avec le Java. j’associe généralement les membres d’un objet comme un élément d’une structure C, ce qui m’a aidé pour comprendre le modèle objet de Java1.
Pour des multiples raisons, qui comprennent bien entendu les calculatrices mais aussi une éventuelle auto-formation ou un projet hypothétique, je me suis remis au C++, pour le meilleur ou pour le pire. Et putaing, je suis passé par le pire. Pour agrémenter le tout, j’ai essayé Microdaube Visual Studio (2010 C++ Express).
Je crois que j’ai mal. Il est temps pour un petit flashback.
zzzziiipp *4 heures plus tôt.*
Bon, j’ai envie de tester le C++ pour un mini projet de roguelike2 . Il me faut TCOD, c’est une lib extrêmement utile pour les roguelikes ou les programmes en pseudo-terminal. Et évidemment, il n’y a pas de version déjà compilée pour gcc&cygwin. Bon bah je télécharge la version MSVC et lance VS2010. J’avais un mauvais souvenir d’avoir essayé la version Ultimate sur un ordinateur qui ne pouvait supporter la charge. C’était lent, lourd et chiant à l’utilisation. Ici, j’utilise une version express que j’avais installé pour hxcpp. Je lance le bousin. Bien entendu, c’est bien plus rapide qu’à mon souvenir. L’interface appraît. J’ai un mauvais préssentiment. J’essaye de me souvenir quelle est l’intérêt d’un projet dans une solution qui elle-même est le projet que je veux faire…
Premier problème technique : Comment on linke une librairie sur cette merde? Temps perdu : 20 minutes (à la locuche). Une fois que j’ai tilté sur la chose, faut que je trouve un moyen d’envoyer les fichiers de données à la même place que l’exécutable, sinon je vais commencer à criser. Ce sera bien plus facile de tester le programme dans des conditions normales.
Deuxième problème technique : Je ne peux pas ouvrir des fichiers à la racine en mode Débogage3 directement. J’ai ceci pour ouvrir un fichier qui se situe dans le même dossier que l’exécutable :
std::string ExePath()
{
char buffer[MAX_PATH];
GetModuleFileName( NULL, buffer, MAX_PATH );
std::string::size_type pos = std::string(buffer).find_last_of( "\\/" );
return std::string(buffer).substr(0, pos);
}
std::string FilePathAtExePath(const std::string& filename)
{
return ExePath() + "\\" +filename;
}
Et évidemment, c’est pas standard4 et c’est moche. Mais bon, je suis en terre inconnue et j’en ai un peu rien à faire Ceci étant fait, je peux m’atteler alors au lecteur d’options. Je suis tenté de faire un parser de fichiers INI (avec les [Titres]
) mais n’ayant aucun intérêt pour eux, je décide de m’en débarasser.
Troisième problème : comment je parse ce truc? Au bout de tentatives bizarres pour remplacer sscanf
pour autre chose qui fonctionnerait avec des std::strings
, j’ai vu que dans la lib standard du C++ résidaient les délicieux rexges. Après quelques dizaines de minutes pour débugger pourquoi un simple regex ne marchait pas et une bonne demie-heure pour obtenir quelque chose de ce truc, j’ai enfin un parser basique qui me lit des lignes dans ce genre:
machin = lol
the.game.you.lost.it="Hahaha"
Enfin. J’en peux plus. Sans rire, j’ai l’impression que mon cerveau est passé par un rouleau-compresseur. J’arrive pas à croire que je n’ai tapé que 100 lignes de foutu C++. Ca et avoir tapé près de 500 caractères formant une histoire après être passé par la torture dite du dèv’ sous Windows. Sur ce, je vous laisse, je vais directement dormir. Bonne nuit et à plus!
Morale de l’histoire : Putain, vivement que je retourne sous Linux.
PS : J’ai triché, j’ai utilisé Sublime Text pour l’image à la une.
Addendum 2024-11-23
Je fais une passe sur mon blog pour maintenir la compatibilité avec les feature de [Hugo] et je dois au moins m’arrêter ici sur préciser que ce post a près de 8 ans au moment où j’écris et depuis mon appréciation de Visual a bien évidemment changé.
Aussi, je tiens à remarquer que mon style d’écriture a bien changé. Pour le mieux, j’espère. Prenez juste ce blog post comme il se doit: une complainte de la part d’un adolescent amateur et bien trop grande gueule pour sa propre santé.
-
System.out.println("Hello World!");
en est l’exemple le plus répandu. ↩︎ -
Encore… Décidemment… ↩︎
-
J’adore la langue française qui se démène pour remplacer des termes étrangers rentrés dans la communicaiton normale pour des mots qui ressemblent à rien. Sans dec’, “couriel”, “pouriel”, “flux” (“stream”, va trouver l’équivalent pour “streamer”), webmestre… Tiens, je vais leur demander de traduire twerk pour nous, ça leur fera les dents! Secouage de fessier? Agitation de dérrière? Ebranlement de fion? A vous de jouer, je suis trop fatigué là. ↩︎
-
Il n’y a aucune manière standard d’obtenir le dossier actuel à travers les OS; ne me parlez pas de Boost, merci. C’est une librairie, donc elle a une implémentation specifique à la plateforme sur laquelle est est excéutée. ↩︎