Quelle était la règle standard de codage la plus étrange que vous ayez été obligé de suivre? [fermé]


173

Quand j'ai posé cette question, j'ai presque toujours obtenu un oui définitif, vous devriez avoir des normes de codage.

Quelle a été la règle standard de codage la plus étrange que vous ayez jamais été obligée de suivre?

Et par plus étrange, je veux dire le plus drôle, ou le pire, ou tout simplement bizarre.

Dans chaque réponse, veuillez mentionner la langue, la taille de votre équipe et les effets néfastes que cela a causés à vous et à votre équipe.


19
Après avoir lu cette liste, j'ai soudainement l'impression d'avoir eu une carrière très chanceuse pour éviter toute cette merde standard forcée!
matt b

La prochaine fois que j'interviewerai pour un emploi, je vais parcourir cette question pour servir de "drapeau rouge. Courez!" indicateur. Codage d'anti-modèles standard, en effet.
Stu Thompson

5
Et j'ai honte d'admettre que très tôt dans ma carrière, j'ai imposé une des réponses à une équipe. Je suis vraiment désolé, les gars.
JasonFruit

Réponses:


434

Je déteste quand l'utilisation de retours multiples est interdite.


26
Quel est le sens supposé de cette règle? Personnellement, j'échouerais à une révision de code pour du code qui pourrait être rendu plus facile à lire en ajoutant un autre retour.
Mark Baker

22
D'un autre côté, éliminer une option au début comme "if (param == null) return null" peut nettoyer un peu votre code, l'interdire au lieu de l'encourager est quelque peu criminel.
Bill K

39
Solution de contournement: if (! Initialize ()) {RetVal = ERR_BADINIT; goto ReturnPoint; } (beaucoup plus de code) ReturnPoint: return RetVal; } Problème résolu! ;)
Marc Bernier

9
Jusqu'à récemment, les retours multiples étaient interdits. Ensuite, le fait qu'il s'agissait d'un reste de C, rendu obsolète par C ++ RAII et des fonctions d'une taille inférieure à 15 lignes, a été révélé. Depuis, comme Braveheart: "FREEDOM !!!!" ... :-p ...
paercebal

122
Votre choix: plusieurs retours ou plus d'instructions if imbriquées. Je vais prendre plusieurs retours.
Lance Fisher

333

indentation inversée. Par exemple:

    for(int i = 0; i < 10; i++)
        {
myFunc();
        }

et:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }

152
Oh mon dieu ... Puis-je rencontrer le sociopathe qui a inventé celui-là? Il pourrait m'apprendre une chose ou deux sur la misanthropie.
John Rudy

23
Cela ne peut pas être vrai.
Dane

191
Chaque fois que vous inversez l'indentation, Dieu tue un développeur de maintenance.
Chris Vest

14
OMG, tu plaisantes?
Andrea Ambu

21
économise des octets précieux ... inestimable, utilisez-le beaucoup
Spikolynn

326

Peut-être pas le plus bizarre que vous obtiendrez, mais je déteste vraiment vraiment quand je dois faire précéder les noms de table de base de données avec 'tbl'


5
N'est-ce pas juste une notation hongroise pour les DB?
ARKBAN

19
N'est-ce pas comme préfixer des variables avec var?
Brian R. Bondy

26
Dans la même veine, je déteste quand les colonnes ID dans les bases de données sont préfixées avec le nom de la table, comme dans la table product, il y aurait une colonne productid. Redondance qui rend parfois la rédaction de scripts sans ORM plus difficile que nécessaire
Andrew Ingram

30
Je préfère en fait que la colonne ID soit précédée du nom de la table. Rend un peu plus facile l'écriture des requêtes. Et pour les clés étrangères, vous pouvez avoir le même champ de clé étrangère que le champ de clé.
Craig

38
Sur une note similaire, je déteste quand les noms de table doivent être au singulier. Mon instinct est de nommer une table qui contient, disons, des clients, «Clients», pas «Client». Cela semble mineur, jusqu'à ce que vous réalisiez tous les problèmes que vous épargneriez si seulement vous pouviez nommer votre table "Transactions" au lieu de "[Transaction]".
Atario

248

Presque tous les types de notation hongroise.

Le problème avec la notation hongroise est qu'elle est très souvent mal comprise. L'idée originale était de préfixer la variable pour que le sens soit clair. Par exemple:

int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.

Mais la plupart des gens l'utilisent pour déterminer le type.

int iAppleCount = 0; // Number of apples.
int iPearCount = 0;  // Number of pears.

C'est déroutant, car bien que les deux nombres soient des entiers, tout le monde le sait, vous ne pouvez pas comparer des pommes avec des poires.


71
Voir cet article de Joel on Software sur la manière dont une bonne utilisation de la notation hongroise peut aider à réduire les bogues: joelonsoftware.com/articles/Wrong.html
flicken

9
Bien sûr, en utilisant C ++ au lieu de C, vous pouvez écrire du code afin que le compilateur vous donne une erreur lors de la comparaison des pommes aux poires.
Andreas Magnusson

5
Oui, Joel a bien compris. Je souhaite que des compilateurs puissent être créés pour appliquer la version de Joel.
Loren Pechtel

9
Cela ne devrait-il pas être "int cntApples = 0; int cntPeas = 0;"? C'est à dire. Le préfixe est la variable "kind".
Blorgbeard sort le

42
Au moins le premier est correct ... tout ce qui contient "Apple" doit être préfixé par "i". ;)
Johannes Charra

240

Aucun opérateur ternaire autorisé là où je travaille actuellement:

int value = (a < b) ? a : b;

... parce que tout le monde "ne comprend pas". Si vous me disiez: "Ne l'utilisez pas parce que nous avons dû les réécrire quand les structures deviennent trop compliquées" (opérateurs ternaires imbriqués, n'importe qui?), Alors je comprendrais. Mais quand vous me dites que certains développeurs ne les comprennent pas ... euh ... Bien sûr.


235
Par tout le monde, votre patron signifie lui-même.
Brian R. Bondy

13
J'avais l'habitude de tomber dans ce camp ... Mais en suis sorti, et j'ai appris à aimer l'opérateur conditionnel (quand c'est approprié).
John Rudy

22
Si quoi que ce soit, la règle devrait être "toujours utiliser l'opérateur ternaire", un opérateur de pure beauté :)
Bobby Jack

16
J'adore ça, mais la raison que je reçois le plus souvent pour ne pas l'utiliser est la même que votre expérience "les gens ne le comprendront pas". Mon argument est qu'ils ne devraient pas travailler s'ils ne peuvent pas comprendre le concept ...
Aidos

7
Sinon, comment initialiseriez-vous conditionnellement une variable constante sans écrire une toute nouvelle fonction (ce qui ne fera pas beaucoup de bien pour la lisibilité). L'utilisation de const pour les «variables» locales fait beaucoup plus de bien pour comprendre et suivre le code qu'une interdiction de l'opérateur ternaire.
Andreas Magnusson

239

Ne JAMAIS supprimer de code lors de modifications. On nous a dit de commenter tous les changements. Gardez à l'esprit que nous utilisons le contrôle de code source. Cette politique n'a pas duré longtemps car les développeurs étaient dans un tollé à ce sujet et comment cela rendrait le code illisible.


3
Je déteste vraiment ça ... il y a quelques personnes qui font ça ici (ce n'est pas une norme ou quoi que ce soit)
chills42

7
De telles règles sont la raison pour laquelle je ressens le BESOIN d'imprimer le code source que j'hérite des autres en couleur. À un sou par page, ce n'est pas très agréable pour mon entreprise - mais c'est la seule façon de le lire si je dois l'imprimer. (Nous avons hérité de beaucoup de choses qui suivaient cette règle ...)
John Rudy

3
Sonne comme une règle développée avant le contrôle de source. Ou parce que les programmeurs ne s'enregistrent qu'une fois par semaine.
Craig

6
J'adore lire ces réponses car cela rend mon travail 100 fois meilleur.
rjh

2
Sentez-vous pour vous ... nous sommes sur SVN depuis plus de 4 ans, mais le développeur senior le déteste et vérifie environ une fois tous les deux mois, passant les trois prochains jours à se plaindre du code cassé: /
Viktor Svub

204

J'ai déjà travaillé sous la tyrannie du Mighty VB King .

Le VB King était le maître pur de MS Excel et VBA, ainsi que des bases de données (d' où son nom de famille: il a joué avec Excel pendant que les développeurs travaillaient avec des compilateurs, et le défier sur des bases de données pouvait avoir des effets néfastes sur votre carrière ... ).

Bien sûr, ses immenses compétences lui ont donné une vision unique des problèmes de développement et des solutions de gestion de projet: bien que n'étant pas exactement des normes de codage au sens strict, le VB King avait régulièrement de nouvelles idées sur les «normes de codage» et les «meilleures pratiques» qu'il essayait (et souvent réussi) à nous imposer. Par exemple:

  • Tous les tableaux C / C ++ doivent commencer à l'index 1, au lieu de 0. En effet, l'utilisation de 0 comme premier index d'un tableau est obsolète et a été remplacée par la gestion perspicace des index de tableau de Visual Basic 6.

  • Toutes les fonctions renverront un code d'erreur: il n'y a pas d'exceptions dans VB6, alors pourquoi en aurions-nous besoin? ( ie en C ++ )

  • Comme "Toutes les fonctions doivent renvoyer un code d'erreur" n'est pas pratique pour les fonctions renvoyant des types significatifs, toutes les fonctions doivent avoir un code d'erreur comme premier paramètre [entrant / sortant].

  • Tout notre code vérifiera les codes d'erreur ( cela a conduit au pire cas de VBScript if-indentation que j'ai jamais vu dans ma carrière ... Bien sûr, comme les clauses "else" n'ont jamais été gérées, aucune erreur n'a été trouvée jusqu'à trop tard ).

  • Puisque nous travaillons avec C ++ / COM, à partir de ce jour, nous coderons toutes nos fonctions utilitaires DOM dans Visual Basic.

  • Les erreurs ASP 115 sont mauvaises. Pour cette raison, nous utiliserons On Error Resume Next dans notre code VBScript / ASP pour les éviter.

  • XSL-T est un langage orienté objet. Utilisez l'héritage pour résoudre vos problèmes (une stupide surprise m'a presque ouvert la mâchoire ce jour-là ).

  • Les exceptions ne sont pas utilisées et doivent donc être supprimées. Pour cette raison, nous décocherons la case à cocher demandant l'appel du destructeur en cas de déroulement d'exception ( il a fallu des jours à un expert pour trouver la cause de toutes ces fuites de mémoire, et il a failli devenir fou quand il a découvert qu'ils avaient volontairement ignoré (et hidden) sa note technique sur la vérification de l'option à nouveau, envoyée quelques semaines avant ).

  • attrapez toutes les exceptions dans l'interface COM de nos modules COM, et supprimez-les silencieusement (de cette façon, au lieu de planter, un module apparaîtrait seulement plus rapide ... Brillant! ... Comme nous avons utilisé la gestion des erreurs über décrite ci-dessus, il nous a même fallu un certain temps pour comprendre ce qui se passait vraiment ... Vous ne pouvez pas avoir à la fois de la vitesse et des résultats corrects, n'est-ce pas? ).

  • À partir d'aujourd'hui, notre base de code sera divisée en quatre branches. Nous gérerons leur synchronisation et intégrerons toutes les corrections / évolutions de bogues à la main.

Tous sauf les tableaux C / C ++ , les fonctions utilitaires VB DOM et XSL-T comme langage POO ont été implémentés malgré nos protestations. Bien sûr, au fil du temps, certains ont été découverts, ahem , brisés et complètement abandonnés.

Bien sûr, la crédibilité de VB King n'a jamais souffert pour cela: parmi les cadres supérieurs, il est resté un expert technique "top gun" ...

Cela a produit des effets secondaires amusants, comme vous pouvez le voir en suivant le lien Quel est le meilleur commentaire dans le code source que vous ayez jamais rencontré?


28
Re: 1-indexation. Parfois, il suffit de se lever et de dire quelque chose de fort comme "c'est stupide et faux". Tracez une ligne dans le sable. Oubliez les égos apaisants et dites-le simplement. Je peux presque garantir que tous les autres programmeurs valables commenceront immédiatement à hocher la tête et à se joindre à nous.
Kirk Strauser

31
@jrista: Si VOUS NE commentez PAS l'orthographe de mon texte, veuillez ignorer ce qui suit ... ... ... ... ... ... ... ... Si vous commentez mon texte, s'il vous plaît envisagez (1) de proposer des corrections, (2) de corriger vous-même l'orthographe, ou (3) de considérer que tous les développeurs dans le monde (loin de là) ne sont pas de langue maternelle anglaise, donc je suppose que tolérer une orthographe incorrecte est le minimum que vous puissiez faire, ou prouvez que vous pouvez faire mieux en m'envoyant la traduction correcte EN FRANÇAIS ... ^ _ ^ ...
paercebal

4
Si ce type était mon patron, je serais allé directement à chaque membre de la haute direction avec une liste de plaintes bien écrite et documentée et je l'aurais fait virer. -1 pour ne pas avoir les couilles pour se défendre.
muusbolla

34
@muusbolla: Qui vous a dit que nous ne nous plaignions pas? Cela s'est intensifié jusqu'à ce qu'une délégation de deux personnes (moi y compris) se rende directement au PDG pour expliquer le problème. Mais je suis désolé d'avoir à vous dire qu'il y a une différence entre un monde idéaliste, où la justice règne, et le monde réel, où certains patrons croient que "la direction n'a jamais tort, même quand elle l'est", et écraseront quiconque osera contredire ce dogme. Le seul souvenir heureux que j'ai de cette époque est le jour de ma démission, il y a près de trois ans, et je suis un homme plus heureux depuis ce jour. Quoi qu'il en soit, si c'est vrai, votre raison de downmod est boiteuse. Désolé.
paercebal

7
@paercebal: En générale, c'est correctement écrit, sauf que quelques petites erreurs: «squatch»: ça doit être «squash»; «This one day»: en ce context-là, on dirait «that day»; «Procédures stockées»: «procédures stock»; «Étouffé» s'écrit «étouffé». Aussi, dans les commentaires, vous utilisez ° mentionné », ce qui doit être« mentionné »Mais vraiment, tout ça ne justifie pas une telle plainte. Au contraire, vous y montrez une excellente maîtrise de l'anglais; félicitations!
intuité le

131

Dans les années 80/90, j'ai travaillé pour une société de simulateurs d'avion qui utilisait FORTRAN. Notre compilateur FORTRAN avait une limite de 8 caractères pour les noms de variables. Les normes de codage de la société réservaient les trois premiers d'entre eux aux informations de style en notation hongroise. Nous avons donc dû essayer de créer des noms de variables significatifs avec seulement 5 caractères!


17
Luxe: nous n'avions que 6 personnages; le paquet avait des noms commençant par g; les fonctions internes ont toutes démarré gk; il y avait des pilotes de poste de travail avec des codes tels que 0p (donc gk0p était le début), nous laissant deux caractères pour le reste du nom Fortran. gk0paa, gk0pab, ...
Jonathan Leffler

103
"Quand j'avais votre âge, nous n'avions que 2 personnages! Et c'était insensible à la casse!"
pookleblinky

53
Avant, nous devions nous lever à 2 heures du matin, 3 heures avant de nous coucher, puis écrire nos propres compilateurs et payer l'entreprise pour le privilège d'aller travailler. Nous n'avions droit qu'à la lettre A pour nos noms de variables. Ensuite, notre patron supprimait notre code et dansait sur nos listes en chantant alléluia.
David Arno

12
"50 identifiants possibles devraient suffire à n'importe qui": p
Chris Vest

5
Heck, les interpréteurs BASIC avec lesquels nous avons travaillé il y a longtemps avaient des noms de variables à deux caractères. Pourquoi se plaindre de 5?
David Thornley

107

J'ai travaillé dans un endroit qui avait une fusion entre 2 entreprises. Le «dominant» avait un serveur majeur écrit en K&R C (c'est-à-dire pré-ANSI). Ils ont forcé les équipes Java (des deux bureaux - probablement 20 développeurs au total) à utiliser ce format, qui a joyeusement ignoré les 2 piliers du «débat d'accolade» et devient carrément fou:

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }

18
Je pense que maintenir une plus grande distinction visuelle entre C et Java faciliterait les transitions. (+1 pour "et va droit au fou.")
Jeffrey L Whitledge

4
Ressemble au style Whitesmiths qui a été utilisé dans l'original «Programming Windows» par Petzold - allez comprendre! ;)
Bobby Jack

7
Je trouve que c'est le style d'accolade le plus intelligent. Malheureusement, la plupart des gens ne l'utilisent pas. Si les accolades ont une signification sémantique, elles doivent être traitées comme ça, non collées à la fin d'une ligne et ignorées.
Ryan Lundy

7
@Kyralessa. Je ne suis pas d'accord ... Je ne sais pas si les accolades ont une signification sémantique, mais elles peuvent certainement affecter la correspondance de motifs et une sensation d'espace. IMO, cette version perd complètement cela. Par exemple, je veux que mon signet pique à l'extérieur du livre, pas au ras des pages.
Michael Easter

6
C'est en fait mon style préféré, mais tout dans le monde (Visual Studio en particulier) utilise par défaut d'autres modes, alors j'ai abandonné. Pourquoi est- ce que je l'aime? Les accolades font "partie" du code contenu - elles le forcent à "ressembler" à une seule instruction du if, ce à quoi il s'attend.
Atario

104

Interdit:

while (true) {

Permis:

for (;;) {

4
D'autres ont fait valoir que for (;;) {c'est un idiome C pour le premier.
Robert P

69
Si je comprends correctement les smileys modernes et novateurs, cette norme fait pleurer les pauvres, surmenés pour une déclaration!
Ben Blank

15
C'est une règle de facto ici. VC6 émet un avertissement du compilateur sur while (true), mais pas sur for (;;). Sinon, ils sont équivalents. Nous choisissons donc celui sans avertissement.
user9876

22
Bjarne S. a dit dans son livre, "car (;;) doit être lu comme pour toujours". Si c'est assez bon pour le créateur de C ++, ça devrait être assez bon pour vous. :-)
Frank Krueger

58
Dans le tout premier programme C sur lequel j'ai travaillé, quelqu'un avait ajouté #define ever (;;) pour que vous puissiez dire "for ever {...}"
James Curran

101

un de mes amis - nous l'appellerons CodeMonkey - a obtenu son premier emploi à l'université [ il y a de nombreuses années] en développant en interne en COBOL. Son premier programme a été rejeté comme «non conforme à nos standards» car il utilisait ... [frissonner!] Instructions IF imbriquées

les normes de codage interdisaient l'utilisation d'instructions IF imbriquées

maintenant, CodeMonkey n'était pas timide et était certain de ses capacités, alors il a persisté à demander à tout le monde en haut de la chaîne et dans l'allée pourquoi cette règle existait. La plupart ont prétendu ne pas savoir, certains inventaient des trucs sur la «lisibilité», et finalement une personne s'est souvenue de la raison originale: la première version du compilateur COBOL qu'ils utilisaient avait un bogue et ne gérait pas correctement les instructions IF imbriquées.

Ce bogue du compilateur, bien sûr, avait été corrigé pendant au moins une décennie, mais personne n'avait contesté les normes . [baaa!]

CodeMonkey a réussi à faire changer les normes - finalement!


7
Steven, cela me rappelle l'histoire de l'expérience du singe: o) freekvermeulen.blogspot.com/2008/08/…
Nick Dandoulakis

5
@ [Nick D]: oui, moi aussi - d'où le nom de code "CodeMonkey" ;-)
Steven A. Lowe


La raison était peut-être fausse, mais il est toujours bon d'éviter les if
manojlds

97

Une fois travaillé sur un projet où les soulignements étaient interdits. Et je veux dire totalement interdit. Donc, dans l'application ac # winforms, chaque fois que nous ajoutions un nouveau gestionnaire d'événements (par exemple pour un bouton), nous devions renommer le nom de la méthode par défaut de buttonName_Click () en autre chose, juste pour satisfaire l'ego du gars qui a écrit le codage normes. À ce jour, je ne sais pas ce qu'il avait contre l'humble soulignement


23
Peut-être que _ était cassé sur son clavier;)
Roman Plášil

139
buttonNameUnderscoreClick ()
vitule

9
A le malheureux effet secondaire d'empêcher l'utilisation de FILE et LINE pour le débogage. Et #if __cplusplus extern "C" dans les fichiers d'en-tête. Et les types intégraux dans stdint.h. Et size_t.
Steve Jessop

8
Heureusement que c'était C # alors
configurateur

4
Je décourage sérieusement les traits de soulignement (mais pas dans le cas OP énuméré ci-dessus. C'est deux frappes supplémentaires (shift + _) que je préfère ne pas m'avoir imposées quand le cas pascal ou camel fera très bien l'affaire.
TGnat

92

Conventions de dénomination de base de données totalement inutiles. Chaque nom de table doit commencer par un nombre. Les nombres indiquent quel type de données se trouve dans le tableau.

  • 0: données utilisées partout
  • 1: données utilisées par un certain module uniquement
  • 2: table de recherche
  • 3: calendrier, chat et courrier
  • 4: journalisation

Cela rend difficile la recherche d'une table si vous ne connaissez que la première lettre de son nom. De plus, comme il s'agit d'une base de données mssql, nous devons partout entourer les noms de tables de crochets.

-- doesn't work
select * from 0examples;

-- does work
select * from [0examples];

65
Je suis désolé, vraiment désolé ...
Kirk Strauser

1
Wow - bon. J'imagine que l'utilisation de Lettres était hors de question? Ce n'est pas non plus une bonne idée, mais au moins vous n'avez pas à citer tous les noms de table.
Mark Brittingham

ahurissant ... qui est venu avec ça? le dba?
dotjoe

90

Nous faisions un projet C ++ et le chef d'équipe était un type Pascal.

Nous avions donc un fichier d'inclusion standard de codage pour redéfinir toute cette syntaxe embêtante C et C ++:

#define BEGIN {
#define END }

mais attendez il y a plus!

#define ENDIF }
#define CASE switch

etc. Il est difficile de se souvenir après tout ce temps.

Cela a pris ce qui aurait été du code C ++ parfaitement lisible et l'a rendu illisible par quiconque sauf le chef d'équipe.

Nous avons également dû utiliser la notation hongroise inversée, c'est-à-dire

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

bien que bizarrement, j'aimais ça.


22
Construire un code impossible à maintenir pour le futur
rshimoda

2
La notation hongroise bien faite est correcte. Fait mal ... ick. Un système de type approprié bat les deux.
Thelema

5
Vous savez, je pense que je suis avec vous là-dessus. Les verrues hongroises ne sont pas si répréhensibles lorsqu'elles sont clouées au bout comme ça.
TED

haha me ramène à l'époque où je suis passé de Pascal à C ++ (il y a environ 16 ans). Chaque fois que je voyais un {je devais me dire mentalement "{signifie COMMENCER". Au moins pour moi, c'était juste dans ma tête.
thomasrutter

6
Lorsque j'ai travaillé dans le support MS VC ++, plusieurs clients ont soumis du code de repro écrit comme ceci. Il nous a fallu du temps pour réaliser que c'était en fait en C ++ (ils n'incluaient pas les #defines).
JBRWilkinson

88

À un ancien emploi:

  • Les tables "normales" commencent par T_
  • Les tables "système" (généralement les recherches) commencent par TS_ (sauf quand elles ne le font pas parce que quelqu'un n'en a pas envie ce jour-là)
  • Les tables de références croisées commencent par TSX_
  • Tous les noms de champ commencent par F_

Oui c'est vrai. Tous les champs, dans chaque table. Pour que nous puissions dire que c'est un champ.


et vous n'aviez pas de préfixe spécial pour les champs de clé primaire ???
Czimi

2
@Czimi: J'ai oublié de le mentionner. Chaque table a un champ appelé FI_ID utilisé comme clé primaire.
Jeromy Irvine

31
Holy sh ... Le T_guy qui a inventé ce cauchemar devrait être tué avec un F_gun et envoyé à TSX_hell.
Sergey Skoblikov

3
Nous avions tbl et fld pour tous les champs et tables. Complètement inutile ...
configurateur

5
@configurator: Vous aviez «tbl» pour tous les champs et «fld» pour toutes les tables? :-)))
Timwi

84

Un de mes amis a rencontré cette règle alors qu'il travaillait à un emploi au gouvernement. L'utilisation de ++ (pré ou post) a été totalement interdite. La raison: différents compilateurs peuvent l'interpréter différemment.


5
Eh bien, à ce stade, vous pourriez tout aussi bien abandonner, non?
Kirk Strauser

90
Quelqu'un a été mordu en ne comprenant pas la différence entre postfix et préfixe, a déclaré un bogue du compilateur, puis l'a infligé à d'autres personnes, je pense.
Bernard

5
En fait, ils avaient raison, dans certaines circonstances. L'interdiction semble cependant un peu exagérée. Prenons par exemple la ligne: a [i] = i ++; je peux être incrémenté avant qu'il ne soit utilisé pour indexer un, ou après. La langue ne définit pas cela.
TED

9
Il a raison - l'ordre des opérations n'est pas garanti lorsque vous utilisez la même variable ailleurs dans l'instruction. Interdisez simplement le code potentiellement ambigu, mais pas toutes les utilisations!
Loren Pechtel

2
=Cela pourrait aussi bien interdire que cela peut être utilisé pour provoquer un comportement indéfini.
configurateur

81

La moitié de l'équipe était en faveur de l'indentation à quatre espaces; l'autre moitié était en faveur de l'indentation à deux espaces.

Comme vous pouvez le deviner, la norme de codage en prescrivait trois, de manière à «offenser tous également» (une citation directe).


42
C'est pourquoi l'identification des onglets est si géniale. Tout le monde peut changer la taille dans son éditeur;)
xardias

41
Ouais, l'indentation de tabulation est géniale ... jusqu'à ce que vous ouvriez le fichier de quelqu'un d'autre et que vous trouviez des choses mal alignées parce que les espaces se sont mélangés là où ils n'auraient pas dû, ou n'ont pas été mélangés là où ils auraient dû. Ensuite, vous reformatez automatiquement et les différences de contrôle de version deviennent laides. Pouah.
Alan Hensel

41
c'est pourquoi vous êtes censé n'utiliser que des tabulations pour indenter, et uniquement des espaces pour aligner, et jamais le twain ne se rencontrera. et si vous allez apporter une modification à l'espace blanc dans un fichier, alors cela doit être le seul changement que vous apportez pour cet archivage particulier.
joh6nn

16
... et cela ne fonctionne jamais. : P
Robert P

10
«Offenser tous également» ... j'adore ça. Je vais devoir m'en souvenir la prochaine fois que je serai en quelque sorte impliqué dans une guerre de normalisation de l'indentation.
Michael Burr

74

Ne pas pouvoir utiliser Reflection car le manager affirmait que cela impliquait trop de «magie».


10
Ouais, la magie est difficile à maintenir, apparemment;) LOL, cependant.
Rik

19
C'est probablement la bonne règle, pour les mauvaises raisons :)
Bobby Jack

71
pour des performances de lecture «magiques» tuant un code de cauchemar obscur impossible à maintenir. Il a raison.
gbjbaanb

4
Je suppose que vous n'étiez pas du tout autorisé à coder en .Net. Après tout, la manière dont le framework s'exécute passe en grande partie par la réflexion.
NotMe

5
A bas ces sorciers !! Toujours là, avec leur magie , voler nos emplois, séduire nos femmes et corrompre nos enfants!
ZJR

71

Le plus étrange que j'ai eu, et celui qui m'a pris un certain temps à renverser, a été lorsque le propriétaire de notre entreprise a exigé que notre nouveau produit soit IE uniquement. Si cela pouvait fonctionner sur FireFox, ce n'était pas grave, mais cela devait être IE uniquement.

Cela peut ne pas sembler trop étrange, à l'exception d'un petit défaut. Tous les logiciels étaient destinés à un progiciel de serveur sur mesure, fonctionnant sous Linux, et toutes les boîtes client que notre client achetait étaient Linux. À moins d'essayer de comprendre comment faire fonctionner Wine (à l'époque, très peu fiable) sur toutes ces boîtes et de voir si nous pouvions faire fonctionner IE et former leurs administrateurs à déboguer les problèmes de Wine, ce n'était tout simplement pas possible. pour répondre à la demande du propriétaire. Le problème était qu'il faisait la conception Web et ne savait tout simplement pas comment rendre les sites Web compatibles avec FireFox.

Cela ne vous choquera probablement pas de savoir que notre entreprise a fait faillite.


1
Je dirais que c'est assez étrange.
Brad Gilbert

14
Trois hourras pour le capitalisme!
starblue

46
Yay pour la survie du plus apte ... ce type ne méritait pas de diriger sa propre entreprise de logiciels.
Mark Brittingham

10
La dernière phrase était géniale. Comment quelqu'un pourrait-il être pris au sérieux quand il prend de telles décisions?
M. Shickadance le

54

Utilisation de noms d'identificateurs génériques numérotés

Dans mon travail actuel, nous avons deux règles qui sont vraiment méchantes:

Règle 1: Chaque fois que nous créons un nouveau champ dans une table de base de données, nous devons ajouter des champs de réserve supplémentaires pour une utilisation future. Ces champs de réserve sont numérotés (car personne ne sait quelles données ils contiendront un jour). La prochaine fois que nous aurons besoin d'un nouveau champ, nous cherchons d'abord un champ de réserve inutilisé.

On finit donc par customer.reserve_field_14contenir l'adresse e-mail du client.

Un jour, notre patron a pensé à introduire des tables de réserve , mais heureusement nous avons pu le convaincre de ne pas le faire.

Règle 2: L'un de nos produits est écrit en VB6 et VB6 a une limite du nombre total de noms d'identifiants différents et comme le code est très grand, nous nous heurtons constamment à cette limite. En guise de «solution», tous les noms de variables locales sont numérotés:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

Bien que cela contourne efficacement la limite d'identifiant, ces deux règles combinées conduisent à un beau code comme celui-ci:

...

If Lvarbool1 Then
  Lvarbool2 = True
End If

If Lvarbool2 Or Lvarstr1 <> Lvarstr5 Then
  db.Execute("DELETE FROM customer WHERE " _ 
      & "reserve_field_12 = '" & Lvarstr1 & "'")
End If

...

Vous pouvez imaginer à quel point il est difficile de corriger l'ancien code ou celui de quelqu'un d'autre ...

Dernière mise à jour: Nous utilisons désormais également des «procédures de réservation» pour les membres privés:

Private Sub LSub1(Lvarlong1 As Long, Lvarstr1 As String)
  If Lvarlong1 >= 0 Then 
    Lvarbool1 = LFunc1(Lvarstr1)
  Else
    Lvarbool1 = LFunc6()
  End If
  If Lvarbool1 Then
    LSub4 Lvarstr1
  End If
End Sub

EDIT: Il semble que ce modèle de code devient de plus en plus populaire. Voir ce post The Daily WTF pour en savoir plus: Astigmatisme :)


10
Sans blague. Je parie qu'il a fallu une éternité pour supprimer toutes ces injections SQL. ;-)
Kirk Strauser

C'est de la pure méchanceté. Je suis sûr que votre patron / TL est un seigneur qui n'attend que son opportunité.
Manuel Ferreria

5
omg, qui diable proposerait des règles comme ça ??? le plus important: comment diable votre équipe parvient-elle à coder ??
hasen

2
Je pense qu'il voulait dire que vous sélectionniez tous les champs par défaut, de sorte que vous obteniez également tous les champs de «réserve», sans avoir besoin de tous les spécifier.
Mr. Shickadance

2
maibe, vous pouvez utiliser la préproduction de code, où vous écririez votre code en utilisant des noms de variables significatifs, puis le remplaceriez par les "corrects" avant de compiler certains comme '% s / email / reserve_field_12 / g';)
João Portela

53

À l'époque de C ++, nous n'étions pas autorisés à utiliser ==,> =, <=, &&, etc., il y avait des macros pour cela ...

if (bob EQ 7 AND alice LEQ 10)
{
   // blah
}

c'était évidemment pour traiter la "vieille affectation accidentelle dans le bogue conditionnel", cependant nous avions aussi la règle "mettre les constantes avant les variables", donc

if (NULL EQ ptr); //ok
if (ptr EQ NULL); //not ok

Je viens de me souvenir que la norme de codage la plus simple que j'aie jamais entendue était "Écrivez du code comme si le prochain responsable était un psychopathe vicieux qui sait où vous vivez."


1
rofl .. écrit fortran in C.
Robert Paulson

je fais toujours la variable null == en c #. Je sais que je n'ai pas besoin de m'inquiéter à ce sujet, mais je ne peux pas m'en empêcher. si je vois les choses autrement, je me sens nerveux. les vieilles habitudes ont la vie dure.
Troy Howard

Le dernier sur le psychopathe ferait tuer certaines personnes presque immédiatement.
Mr. Shickadance

31
+1 pour le psychopathe vicieux.
rcollyer

Lorsque je publie du code sur des forums, j'utilise parfois des éléments tels que LT et SHL, pour éviter que les opérateurs ne soient transformés en HTML.
supercat

45

Notation hongroise en général.


11
Eh bien, j'aime H / N pour le contrôle sur une page. Il est beaucoup plus facile de trouver tous les contrôles de zone de texte dans une liste déroulante IntelliSense lorsque tout ce que je dois rechercher est txtFooBar.
cciotti

20
La notation hungarienne n'est pas mauvaise, il suffit de l'utiliser correctement joelonsoftware.com/articles/Wrong.html
Czimi

1
Je concéderai en ce qui concerne les contrôles. Ensuite, la notation hongroise peut être utile. En général cependant, je pense que la notation hongroise est obsolète et généralement mal utilisée. Il a dérivé de son intention initiale.
vfilpar

9
Horriblement mal utilisé, oui. Faux, non.
Loren Pechtel

2
Beaucoup de gens commencent un nom d'interface avec un I, IEnumerable, IList ... Dans le framework .Net, toutes les interfaces commencent par un I.
tuinstoel

43

J'ai eu beaucoup de règles stupides , mais pas beaucoup que je considère carrément étranges.

Le plus idiot était un travail à la NASA que j'avais travaillé au début des années 90. C'était un travail énorme, avec plus de 100 développeurs. Les développeurs expérimentés qui ont rédigé les normes de codage ont décidé que chaque fichier source devait commencer par un acronyme de quatre lettres et que la première lettre devait représenter le groupe responsable du fichier. C'était probablement une excellente idée pour les anciens projets FORTRAN 77 auxquels ils étaient habitués.

Cependant, c'était un projet Ada , avec une belle structure de bibliothèque hiérarchique, donc cela n'avait aucun sens. Chaque répertoire était plein de fichiers commençant par la même lettre, suivis de 3 autres lettres absurdes, d'un trait de soulignement, puis d'une partie du nom de fichier qui comptait. Tous les paquets Ada devaient commencer par cette même verrue à cinq caractères. Les clauses Ada "use" n'étaient pas autorisées non plus (sans doute une bonne chose dans des circonstances normales), donc cela signifiait que toute référence à un identifiant qui n'était pas local à ce fichier source devait également inclure cette verrue inutile. Il aurait probablement dû y avoir une insurrection à ce sujet, mais l'ensemble du projet était géré par des programmeurs juniors et fraîchement recrutés par les étudiants (moi-même étant ce dernier).

Une déclaration d'affectation typique (déjà verbeuse dans Ada) finirait par ressembler à ceci:

NABC_The_Package_Name.X := NABC_The_Package_Name.X + 
  CXYZ_Some_Other_Package_Name.Delta_X;

Heureusement, ils étaient au moins suffisamment éclairés pour nous permettre plus de 80 colonnes! Pourtant, la verrue de l'installation était suffisamment détestée pour qu'elle devienne un code standard au sommet des fichiers source de tout le monde pour utiliser les «renommés» d'Ada pour se débarrasser de la verrue. Il y aurait un changement de nom pour chaque package importé ("withed"). Comme ça:

package Package_Name renames NABC_Package_Name;
package Some_Other_Package_Name renames CXYZ_Some_Other_Package_Name;
--// Repeated in this vein for an average of 10 lines or so

Ce que le plus créatif parmi nous a fait, c'est d'essayer d' utiliser la verrue pour créer un nom de paquet réellement sensé (ou idiot). (Je sais ce que vous pensez, mais les explications n'étaient pas autorisées et honte à vous! C'est dégoûtant). Par exemple, je suis dans le C COMMUN groupe de code, et je devais faire un paquet à l' interface avec le W groupe orkstation. Après une séance de brainstorming avec le gars de Workstation, nous avons décidé de nommer nos paquets afin que quelqu'un ayant besoin des deux écrive:

with CANT_Interface_Package;
with WONT_Interface_Package;

1
Avec tout cela et la NASA n'arrivait toujours pas à déterminer s'il fallait calculer en kilomètres ou en miles ...
NotMe

16
Merde, et je pensais vraiment que vous alliez tout faire et utiliser une convention de nommage de paquet CUN * _ et W * NK_. Désolé, j'ai des tourettes textuelles à combustion lente et explosives. Mais le vôtre était beaucoup, beaucoup, plus drôle!
defmeta

41

Quand j'ai commencé à travailler à un endroit et à entrer mon code dans le contrôle de code source, mon patron est soudainement venu vers moi et m'a demandé d'arrêter de commettre autant de choses. Il m'a dit qu'il était déconseillé de faire plus d'un commit par jour pour un développeur car cela gâche le contrôle de code source. Je l'ai simplement bouche bée ...

Plus tard, j'ai compris que la raison pour laquelle il est même venu me voir à ce sujet est que le serveur SVN lui enverrait (ainsi qu'à 10 autres hauts dirigeants) un mail pour chaque commit que quelqu'un fait. Et en jonçant le contrôle de la source, j'ai deviné qu'il avait sa boîte aux lettres.


Mettez l'e-mail en surbrillance, cliquez sur Supprimer, terminé
TheLQ

Je ne suis certainement pas fan des soi-disant «gros enregistrements». Engagez-vous lorsque votre changement est terminé, aussi simple que cela. J'aime aussi m'engager à la fin de la journée de travail car cela impose dans mon esprit que mon code devrait être compilable et être au moins exécutable avec le reste du projet pour d'autres codeurs le lendemain matin.
Jesse C. Slicer

2
Obtenez le meilleur des deux mondes - Engagez-vous auprès de votre succursale locale chaque fois que vous ne voulez pas perdre quelque chose. Rebase et écrase ces commits lorsque vous êtes prêt à les mettre en master. (pardonnez la terminologie git - je suis sûr que c'est possible dans mercurial et un tas d'autres systèmes aussi)
Michael Anderson

Je suis d'accord avec tout ce qui précède. C'est un problème enraciné de l'approche du contrôle de version. Il n'a pas de solution technologique. J'ai envisagé de passer à git-svn, ce qui me permettrait de travailler avec un référentiel local puis de pousser les choses vers le référentiel SVN, mais cela aurait juste envoyé les mails pour tous les commits de ma journée en un seul lot, et aurait résolu rien pour mes patrons.
Avihu Turzion

34

Faire toutes les requêtes de base de données via des procédures stockées dans Sql Server 2000. Des requêtes complexes multi-tables aux requêtes simples comme:

select id, name from people

Les arguments en faveur des procédures étaient:

  • Performance
  • Sécurité
  • Maintenabilité

Je sais que le sujet de la procédure est assez controversé, alors n'hésitez pas à noter ma réponse par la négative;)


2
La maintenabilité peut être améliorée si les noms de table et de colonne ne sont pas uniques, mais les noms de SP le sont. Cela pourrait faciliter la recherche de références de code. S'il y a d'autres avantages de meilleure maintenabilité, je n'en ai pas connaissance. La sécurité est la principale raison d'utiliser les SP.
Jeffrey L Whitledge

2
Je suis d'accord que pour des raisons générales, ce n'est pas 100% wtf, mais voir ce lien: codinghorror.com/blog/archives/000292.html
azkotoki

2
"La sécurité est la principale raison d'utiliser les SP." Non. Rien dans les SP de SQL Server n'est plus sûr. Ils ne sont sécurisés que lorsqu'ils sont appelés en tant que requêtes paramétrées, ce qui peut être fait aussi bien avec le SQL dynamique.
Flory

4
Nan: les sprocs sont utiles. Bien que cela puisse parfois être pénible, vous finissez par écrire une meilleure interface de base de données plus réutilisable. Vos dba peuvent également analyser plus facilement les problèmes de performances et mettre à jour un système de production sans changement de code d'application. Cependant, je ne préconise pas la logique biz dans les sprocs.
Robert Paulson

4
enterrer les requêtes dans le code compilé est une telle douleur, je suis à 100% derrière la politique de 100% sprocs pour l'abstraction seule
annakata

33

Il doit y avoir 165 tests unitaires (pas nécessairement automatisés) pour 1000 lignes de code. Cela fonctionne à un test pour environ toutes les 8 lignes.

Inutile de dire que certaines des lignes de code sont assez longues et que les fonctions renvoient ces pointeurs pour permettre le chaînage.


Comment un test unitaire n'est-il pas automatisé?
pupeno

Comment ont-ils trouvé le chiffre magique 8?
Rohit

1
Que se passe-t-il si vous en avez 164? 166?
Daniel Daranas

8
Plus comme 6 lignes.
récursif le

1
Cela dépend de la finesse de vos tests, je suppose. Je considère function(x).should == 2qu'il s'agit d'un seul test, tandis que d'autres en regrouperaient 10 et les appelleraient un seul test.
Orion Edwards

30

Nous avons dû trier toutes les fonctions par classes par ordre alphabétique, pour les rendre "plus faciles à trouver". Qu'à cela ne tienne, l'ide avait une baisse. C'était trop de clics.

(le même responsable technique a écrit une application pour supprimer tous les commentaires de notre code source).


3
Bien sûr, parce que les commentaires ne sont que du désordre, après tout ... et pensez au nombre de cycles que le pré-processeur enregistre au moment de la compilation! (L'application est encore plus drôle que la règle. Bonne
réponse

7
Bien sûr! Les développeurs sont censés écrire du code, pas perdre de temps à écrire des commentaires :)
Daniel Rikowski

2
Ouais! Et les commentaires ralentissent la construction!
Greg D

2
Néanmoins, je pense que c'est une bonne règle de trier les membres par type (champs, propriétés, méthodes) et par nom
abatishchev

3
Je trie les méthodes, les membres, etc. par ordre alphabétique au sein de leurs groupes respectifs, à la fois en en-tête et en source ... mais uniquement parce que je suis obsessionnel.
Jon Purdy

29

En 1987 environ, j'ai pris un emploi dans une entreprise qui m'a embauché parce que je faisais partie d'une petite poignée de personnes qui savaient comment utiliser Revelation. La révélation, si vous n'en avez jamais entendu parler, était essentiellement une implémentation sur PC du système d'exploitation Pick - qui, si vous n'en avez jamais entendu parler, tire son nom de son inventeur, le fabuleusement nommé Dick Pick. On peut en dire beaucoup sur Pick OS, la plupart du temps bien. Un certain nombre de fournisseurs de supermini (Prime et MIPS, au moins) ont utilisé Pick, ou leurs propres implémentations personnalisées.

Cette société était une boutique de premier ordre et pour ses systèmes internes, elle utilisait Information. (Non, c'était vraiment son nom: c'était l'implémentation de Pick par Prime.) Ils avaient un contrat avec l'État pour construire un système basé sur PC, et avaient consacré environ un an à leur projet Revelation avant que le gars ne fasse tout le travail, qui était aussi leur directeur MIS, a décidé qu'il ne pouvait plus faire les deux emplois et m'a embauché.

En tout cas, il avait établi un certain nombre de normes de codage pour leur logiciel basé sur Prime, dont beaucoup dérivaient de deux conditions de base: 1) l'utilisation de terminaux stupides à 80 colonnes, et 2) le fait que depuis Prime ne l'a pas fait. t avoir un éditeur visuel, il avait écrit le sien. En raison de la portabilité magique du code Pick, il avait introduit son éditeur dans Revelation, et avait construit l'ensemble du projet sur le PC en l'utilisant.

Revelation, bien sûr, étant basé sur PC, avait un très bon éditeur plein écran, et n'a pas objecté lorsque vous avez dépassé la colonne 80. Cependant, pendant les premiers mois que j'y étais, il a insisté pour que j'utilise son éditeur et ses normes.

Ainsi, la première norme était que chaque ligne de code devait être commentée. Chaque ligne. Aucune exception. Son raisonnement était que même si votre commentaire disait exactement ce que vous veniez d'écrire dans le code, devoir le commenter signifiait au moins avoir pensé à la ligne deux fois. De plus, comme il le soulignait joyeusement, il avait ajouté une commande à l'éditeur qui formatait chaque ligne de code afin que vous puissiez mettre un commentaire de fin de ligne.

Oh oui. Lorsque vous avez commenté chaque ligne de code, c'était avec des commentaires de fin de ligne . En bref, les 64 premiers caractères de chaque ligne étaient pour le code, puis il y avait un point-virgule, et ensuite vous aviez 15 caractères pour décrire ce que faisaient vos 64 caractères. En bref, nous utilisions une convention de langage assembleur pour formater notre code Pick / Basic. Cela a conduit à des choses qui ressemblaient à ceci:

EVENT.LIST[DATE.INDEX][-1] = _         ;ADD THE MOST RECENT EVENT
   EVENTS[LEN(EVENTS)]                 ;TO THE END OF EVENT LIST

(En fait, après 20 ans, j'ai finalement oublié la syntaxe de continuation de ligne de R / Basic, donc cela peut avoir l'air différent. Mais vous voyez l'idée.)

De plus, chaque fois que vous deviez insérer des commentaires multilignes, la règle était d'utiliser une boîte à fleurs:

************************************************************************
**  IN CASE YOU NEVER HEARD OF ONE, OR COULDN'T GUESS FROM ITS NAME,  **
**  THIS IS A FLOWER BOX.                                             **
************************************************************************

Oui, ces astérisques fermants sur chaque ligne étaient obligatoires. Après tout, si vous utilisiez son éditeur, ce n'était qu'une simple commande d'éditeur pour insérer une boîte à fleurs.

Le faire céder et me laisser utiliser l'éditeur intégré d'Apocalypse a été une véritable bataille. Au début, il a insisté, simplement parce que c'était les règles. Quand j'ai objecté que a) je connaissais déjà l'éditeur d'Apocalypse b) il était nettement plus fonctionnel que son éditeur, c) d'autres développeurs d'Apocalypse auraient la même perspective, il a rétorqué que si je ne m'entraînais pas sur son éditeur, je ne le ferais pas jamais être en mesure de travailler sur la base de code Prime, ce qui, comme nous le savions tous les deux, n'allait pas se produire tant que l'enfer ne serait pas gelé. Finalement, il a cédé.

Mais les normes de codage ont été les dernières à disparaître. Les commentaires de la boîte à fleurs en particulier étaient une stupide perte de temps, et il m'a combattu bec et ongles dessus, disant que si j'utilisais juste le bon éditeur, les maintenir serait parfaitement facile. (Le tout est devenu assez passif-agressif.) Finalement, j'ai cédé tranquillement, et à partir de là, tout le code que j'ai apporté aux revues de code a eu ses précieux commentaires sur les boîtes à fleurs.

Un jour, plusieurs mois après le début de mon travail, alors que je me suis avéré plus que compétent (surtout en comparaison avec le remarquable défilé d'autres codeurs qui sont passés par ce bureau pendant que j'y travaillais), il regardait par-dessus mon épaule alors que je a fonctionné, et il a remarqué que je n'utilisais pas de commentaires de boîtes à fleurs. Oh, j'ai dit, j'ai écrit un formateur de code source qui convertit mes commentaires dans votre style lorsque je les imprime. C'est plus facile que de les maintenir dans l'éditeur. Il ouvrit la bouche, réfléchit un instant, la referma, s'en alla et nous ne parlâmes plus jamais des normes de codage. Nos deux tâches sont devenues plus faciles par la suite.


14
+1 pour le formateur de commentaires lors de l'impression
BradC

1
Le bac à fleurs ne doit JAMAIS être surutilisé. Je déteste quand je lis du code, d'accord, beau commentaire, puis voir une boîte à fleurs crier "CECI FAIT CECI ET CECI ET CECI"
TheLQ

26

Lors de mon premier emploi, tous les programmes C, aussi simples ou complexes soient-ils, n'avaient que quatre fonctions. Vous aviez le principal, qui appelait tour à tour les trois autres fonctions. Je ne me souviens plus de leurs noms, mais ils étaient quelque chose du genre begin (), middle () et end (). begin () a ouvert les fichiers et les connexions à la base de données, end () les a fermés et middle () a fait tout le reste . Inutile de dire que middle () était une fonction très longue.

Et pour rendre les choses encore meilleures, toutes les variables devaient être globales.

L'un de mes souvenirs les plus fiers de ce travail est d'avoir participé à la révolte générale qui a conduit à la destruction de ces normes.


2
Je suppose que sur le papier dans une salle de réunion, cela sonnait bien, mais je plains le programmeur qui a dû le suivre
TheLQ

Doit avoir été conçu par un professeur d'anglais.
yodie

Doit avoir été conçu par un programmeur COBOL.
bruno

Doit avoir utilisé beaucoup de goto.
nouveau123456

26

Une norme de codage C écrite en externe qui avait la règle `` ne comptez pas sur la priorité des opérateurs intégrée, utilisez toujours des crochets ''

Assez juste, l'intention évidente était d'interdire:

a = 3 + 6 * 2;

en faveur de:

a = 3 + (6 * 2);

Le fait était que cela était appliqué par un outil qui suivait les règles de syntaxe C que «=», «==», «.» et l'accès au tableau sont des opérateurs. Donc, code comme:

a[i].x += b[i].y + d - 7;

devait être écrit comme suit:

((a[i]).x) += (((b[i]).y + d) - 7);

2
peut-être (((a) [(i)]). x) + = ((((b) [(i)]). y) + (d)) - (7)); ?
Behrooz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.