Bonjour,
Luc Hermitte écrit :
C' est évident.Le C++ demande quantité d'autres règles plus ... axées sur la qualité du code, sur le fond en somme.
Salut.
Bonjour,
Luc Hermitte écrit :
C' est évident.Le C++ demande quantité d'autres règles plus ... axées sur la qualité du code, sur le fond en somme.
Salut.
Dans l'original, ils commencent à 0, ce n'est pas une erreur de traduction, faut pas oublier qui sont les auteurs. C'est un livre sur le C++, il s'agit d'une pointe d'humour qui, à mon sens, est tout à fait justifiée.Envoyé par koala01
Ce n'est pas sur les auteurs originaux que je tire à boulet rouge...Envoyé par Miles
Ils font "de l'humour" en numérotant les règles à partir de 0, mais restent cohérents (la dernière, numérotée 100 est la 101eme)...Soit...
Ceux sur qui je tire à boulet rouge, ce sont les traducteurs, dont on remarque qu'ils ne sont pas (suffisemment) attentifs à ce qu'il traduisent:
Ils s'arretent à la numérotation de la dernière cent (heu... sans) se rendre compte que la regle 0 est... la première, et qu'il y en a donc bien 101... et modifient le titre...Sans meme avoir pris la peine de réfléchir un tout petit peu...
C'est, typiquement, ce qui fait qu'il est si difficile de trouver une traduction correcte des (bonnes) publications de langue anglaise, et c'est vraiment malheureux...
Personnellement, je connais suffisement l'anglais pour arriver à lire un livre, mais, à l'instar de beaucoup, je préfèrerais, tant qu'à faire lire un livre dans ma langue maternelle...
Comme les (bons) auteurs francophones ne sont pas légion dans ce domaine, si on décide d'utiliser une traduction, on risque malheureusement d'avoir une "interprétation" de ce que le traducteur aura compris, et non, la traduction réelle de ce que l'auteur a écrit...
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Et de là à ce que le "one-o-one" (*) soit à interpréter comme les "bases à connaitre" ... (J'avais déjà croisé cette expression à quelques reprises)
(*) les cours commencent là bas par le 101 (premier cours première année) si j'ai bien suivi.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Bonjour,
Déjà, un reproche à l'auteur du guide du style, c'est sa position sur les tabulations.
[TROLL]Il est préférable[/TROLL] d'indenter avec les tabulations, car non seulement c'est moins ch***t à modifier, mais en plus, les tabulations sont réglables sur tout bon éditeur, permettant d'adapter aux préférences du codeur.
Par contre, il ne faut pas utiliser de tabulations à l'intérieur d'une ligne (pour faire de "jolis" alignements par exemple), pour les mêmes raisons.
Une fonction très utile peut être la "Convert leading spaces to tabs" de nombreux éditeurs de textes, notamment UltraEdit, fonction dont Visual Studio est bizarrement dépourvue.
Quant aux 101 règles, elles me rappellent ceci.![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Perso je ne supporte pas le code indenté à la tabulation. En théorie, c'est bien ce que tu dis, mais en pratique ....
* Tout d'abord une tabulation doit toujours être de 8 en ce qui me concerne.
* Ensuite, même si tu n'utilises pas une tabulation après du texte sur une ligne, cette approche introduira automatiquement des décalages sur les textes alignés
Avec les indentations flottantes, tu oublies tout de suite un quelconque alignement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (...) // pour tous les toto { store(i); // stocke un copie du toto
* un code indenté à la tabulation ne peut pas être copié-collé pour les balises {code} des forums de developpez, il sera également illisible par mail/usenet, sur une page web, imprimé avec a2ps, ...
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Euh... Je fais ça tous les jours...Envoyé par Luc Hermitte
Naturellement, on n'a rien pour empêcher un affichage foireux avec des tabs de 8. Mais hop, un petit copié-collé vers ton éditeur préféré (même putty+vi) et ça marche...
J'ai déjà fait ça aussi... Il y a même un paramètre disponible pour indiquer de combien doivent être les tabs (comme dans tout bon programme traitant du texte)...imprimé avec a2ps, ...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Curieusement, le même argument permet d'arriver à une conclusion opposée sur l'usage de la tabulation pour indenter :Envoyé par Luc Hermitte
Linux kernel coding style (Linus Torvalds)
Du livre cité précédemment je retiendrai :
Envoyé par Herb Sutter and Andrei Alexandrescu
Envoyé par Herb Sutter and Andrei Alexandrescu
Donc on change toute l'indentation a chaque fois que quelqu'un édite le fichier, ruinant ainsi la possibilité de faire des diffs et de voir ce qui a réellement changé?Envoyé par boromir73
Dès qu'il y a plus d'une personne sur un projet, il faut spécifier ce genre de choses ou alors on arrive a des incohérences. Une alternative qui serait aussi gérable, ce serait d'avoir des outils qui réindenterait le code correctement... mais il y a toujours une part de manuel et des choix qui dépendent de la sémantique.
Au contraire, avec les tabulations, tu peux choisir de les traiter comme des séquences de 4 ou 8 espaces sans changer le fichier.
La tabulation est une indentation sémantique, c'est bien plus pratique que les espaces qui ne sont que mise en forme.
En perdant de l'alignement...Envoyé par loufoque
En théorie, il y a moyen de s'en sortir en utilisant les tabulations pour l'indentation et des espaces pour l'alignement, et donc en utilisant parfois des tabulations suivies d'espaces mais le seul fichier que j'ai jamais vu supporter un changement de taille de tabulation sans perte de qualité du formatage (du moins, tant qu'on ne considère pas que la taille des lignes fait partie de cette qualité) est un que j'ai écrit pour vérifier que j'avais bien compris cette technique. Le pire étant probablement un fichier où trois tailles de tabulations différentes avaient été utilisées...
Il faut savoir aussi ce qu'on aligne.Envoyé par Jean-Marc.Bourguet
Le seul exemple de perte d'alignement que j'ai vu ici était dans une tentative de conserver un alignement sur des zones d'indentation différente. C'est normal que ça ne marche pas dans de telles circonstances...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Envoyé par Médinoc
Pour qu'un changement de taille de tabulation fonctionne correctement, il faut utiliser des tabulations sur la deuxième ligne jusqu'à être sous le f de fonction et ensuite des espaces. Il est quasiment impossible de faire ça automatiquement. C'est extrêmement rarement fait par ceux qui utilisent des tabulations, et je n'ai jamais vu de fichiers où c'était fait de manière constante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fonction(parametre1, parametre2);
Je résous ce problème de manière simple: Je ne mets qu'un seul espace
Et souvent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fonction(parametre1, parametre2);
Voire même:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fonction(parametre1, parametre2 );
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 fonction( parametre1, parametre2 );
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Mouais, pas très lisible, ça.
Et ça, c'est plus lisible sans doute?
Bonne chance pour retrouver le niveau d'indentation avec un truc pareil...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 { pResultEntity = new CSwResultEntity( row.GetIdMark(), FIGURATIVE_HIT, row.GetApplicationNumber(), rowMarkType, row.GetFilingDate(), row.GetPriorityDate(), prioclash, class_match, row.GetMarkName(), row.GetIddeno(), -1, 0, 0, -1, 0, -1, -1, m_verbalQuestion.GetIdQuestion(), row.GetIdPicture(), row.GetClasses(), row.GetVersionNice(), row.GetOdMarkNR(), row.GetLgstMark(), row.GetRegistrationNumber()); }
(Surtout qu'avant que j'ajoute les accolades, il y avait juste un if devant...)
Avec une indentation moins barbare, on se repère tout de suite plus facilement, sauf peut-être si on utilise des tabs de 2...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 { pResultEntity = new CSwResultEntity( row.GetIdMark(), FIGURATIVE_HIT, row.GetApplicationNumber(), rowMarkType, row.GetFilingDate(), row.GetPriorityDate(), prioclash, class_match, row.GetMarkName(), row.GetIddeno(), -1, 0, 0, -1, 0, -1, -1, m_verbalQuestion.GetIdQuestion(), row.GetIdPicture(), row.GetClasses(), row.GetVersionNice(), row.GetOdMarkNR(), row.GetLgstMark(), row.GetRegistrationNumber() ); }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Faux,Envoyé par Jean-Marc.Bourguet
définit deux pointeurs, c'est
Code : Sélectionner tout - Visualiser dans une fenêtre à part int* a,b;
qui définit un pointeur et un int.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int *a,b;
Envoyé par spidermario
Tu as vérifié avant de dire une bêtise, spidermario ?
Je me permets de contester cette énormité scientifiquement.
En C comme en C++, b est un entier.
Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 einstein:/users/anc0306/fbenoit/C$>cat testPtr.c int main(void) { int* a,b; int *pa = a; int *pb = b; int bb = b; return 0; } einstein:/users/anc0306/fbenoit/C$>gcc -Wall -Wextra -Wwrite-strings -O2 -c testPtr.c testPtr.c: In function `main': testPtr.c:6: attention : initialisation transforme un entier en pointeur sans transtypage testPtr.c:5: attention : variable inutilis?e << pa >> testPtr.c:6: attention : variable inutilis?e << pb >> testPtr.c:7: attention : variable inutilis?e << bb >> einstein:/users/anc0306/fbenoit/C$>mv testPtr.c TestPtr.cpp einstein:/users/anc0306/fbenoit/C$>gcc -Wall -Wextra -Wwrite-strings -O2 -c TestPtr.cpp TestPtr.cpp: In function `int main()': TestPtr.cpp:6: erreur: conversion invalide de << int >> vers << int* >> TestPtr.cpp:5: attention : variable << pa >> inutilis?e TestPtr.cpp:6: attention : variable << pb >> inutilis?e TestPtr.cpp:7: attention : variable << bb >> inutilis?e
(Désolé pour le gcc en Français, c'est un des serveurs de mon université, je n'ai pas compris pourquoi ils nous ont servi une VF...)
Edit: Merci, j'ai mis un export LC_MESSAGES=C dans mon .profile et ça marche à merveille![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Dans ce cas, mon livre de C++ comporte une erreur
Enfin, si tu le dis...
Edit : je viens de revérifier dans mon livre et je ne retrouve même plus où j'avais vu ça
Je me demande bien ce qui m'était passé par la tête lorsque j'ai posté tout-à-l'heure![]()
Partager