90

91

doxgen le fait

92

J'allais le dire, et il le fait pas si mal d'ailleurs, il fait de zoli graphs ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

93

Ouais bien sympa doxygen ^^
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

94

Zephyr (./86) :
"n'existe pas" ? qu'est-ce que tu as voulu dire par là ? grin

Que dans int * a, b;, l'étoile ne s'attache qu'au a, donc une déclaration int* n'existe pas, c'est une déclaration int de la variable *a.
Sinon puisqu'il semble utile de l'expliquer, je pense (comme Thibaut a priori) que l'astérisque a sa place à coté du "int" puisqu'elle fait partie du type de la variable (la variable a est bien de type int*)

Bah non, elle n'en fait pas partie, parce que int *a, b; déclare a de type int * et b de type int.
la variable ne s'appelle pas *a

Pourtant c'est ça l'idée de la déclaration: soient *a et b de type int.
Zephyr (./78) :
du coup je déclare jamais plusieurs variables sur une ligne

Et ça c'est un workaround pourri pour le fait que tu n'acceptes pas d'interpréter la déclaration comme prévu par le langage C.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

95

(c'est moche de déclarer plusieurs variables sur une même ligne)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

96

int a;
int b;
int c;
c'est moche smile

97

./94 : tu n'as rien prouvé ni expliqué, je reste sur les raisons données en ./86 ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

98

Rien que de les appeler a, b et c c'est moche en effet cheeky
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

99

Personnellement, pour les déclarations de plusieurs variables je fais int i, j, k, l; quand les noms de variable sont courts, et un truc comme
int maVariableTruc,
	maVariableChose,
	maVariableBidule;
Quand les noms sont plus longs et/ou qu'il y a des assignations. (avec une tabulation, peu importe la taille, juste pour marquer que c'est la suite de la déclaration du dessus)

Enfin ceci dit je n'ai pas votre expérience professionnelle donc...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

100

Nil (./89) :
Sinon, l'inconvénient de ne pas commenter le code en comptant sur sa "lisibilité", c'est quand on doit faire un debug rapide et qu'on n'a pas le temps de prendre du recul pour "voir ce que ça fait".
pencil

Méthode perso : seulement un commentaire par "paragraphe" en général (ça sert quand on relit le source vite fait et qu'on veut avoir une vue générale de ce qui se passe), sauf quand il y a une ligne de code un peu "subtile".
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

101

Personnellement, j'essaie (quand je fais du code propre) de toujours ajouter un commentaire pour expliquer ce que fait la fonction, la tête des arguments et leurs valeurs potentielles, et la tête de ce que ça doit renvoyer happy Avec souvent des références à l'algo en cours, c'est utile pour débugguer oui (genre donner la correspondance de chaque ligne de code avec chaque ligne de l'algo théorique)

avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

102

./87 : Cela n'a rien a voir avec les pattern mais plutôt la notion de responsabilité d'une fonction/classe. C'est bien beau de renvoyer null sur les malloc etc, mais si c'est pour à la fin le remonter jusqu'à l'utilisateur final et faire exit ca sert pas a grand chose... Finalement t'as une complexité cyclomatique de malade pour un code censé être simple. Enfin ca se voit que tu ne testes pas ton code, ou alors que tu n'as pas la notion de certaines métriques comme le code coverage etc. wink

103

Ouais à mon tour de montrer mon code.
Voici comment j'indente mon Python trigni
    def on_action_export_triggered(self):
        file_name = KFileDialog.getSaveFileName(KUrl(), "*.png", self)
        if not file_name.isNull():
          file = QFile(file_name)
          file.open(QIODevice.WriteOnly)
          self.image.save(file, "PNG")
        
    def on_action_color_triggered(self):
        color = QColorDialog.getColor(self.pen.color(), self)
        if color.isValid():
          self.pen.setColor(color)
        
    def on_action_pen_thin_triggered(self):
        self.pen.setWidth(1)
        
    def on_action_pen_normal_triggered(self):
        self.pen.setWidth(2)


Et voici un bout de code en C pour montrer quand même que je sais personnaliser mon style, mon art :
void Game_play(Game *this, Joypad *joypad, Graphics *graphics)
{
  unsigned short current_level = 0;

  Hero hero;
  Hero_init(&hero, 5);

  do
  {
    Level_init(&(this->memory->level), FileGame_getLevelData(this->file_game, current_level), &(this->memory->level_memory));
    Level_play(&(this->memory->level), &hero, graphics, joypad);

    if(!hero.character.alive)
      hero.nb_lives--, hero.character.alive = true;
    else if(!joypad->keys.quit)
      current_level++;

  }while(!joypad->keys.quit && current_level < this->file_game->nb_level && hero.nb_lives > 0);
}

void Level_play(Level *this, Hero *hero, Graphics *graphics, Joypad *joypad)
{
  this->hero = hero;
  Hero_initLevel(hero, &(this->hero_start_pos));

  // On attend que le joueur soit prêt.
  Joypad_waitNoKey(joypad);
  unsigned short clignote = 0;
  do
  {
    hero->visible = (clignote <= 3);
    clignote = (clignote + 1) & 0x07;
    Level_draw(this, graphics);
  }while(!Joypad_isKeyPressed(joypad));
  hero->visible = true;

  // Boucle principale
  do
  {
    Level_update(this, joypad);
    Level_draw(this, graphics);
  } while(hero->character.alive && !hero->escaped && !joypad->keys.quit);
}

void Level_update(Level *this, Joypad *joypad)
{
  // Joypad
  Joypad_update(joypad);

  // Hero
  Hero_update(this->hero, joypad, this);

  // Holes
  unsigned short i = 0;
  while(i < List_count(&(this->holes)))
  {
    Hole *hole = List_get(&(this->holes), i);
    Hole_update(hole, this);
    if(hole->state == Hole_FREE)
      List_remove(&(this->holes), i); // On vire le trou
    else
      i++;
  }

  // Enemies
  Iterator it;
  Iterator_init(&it, &(this->enemies));
  while(Iterator_hasElement(&it))
  {
    Enemy_update(Iterator_get(&it), this, this->hero);
    Iterator_next(&it);
  }
}

On se délecte devant ces « & » occasionnels qui ponctuent agréablement mon code.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

104

Zephyr (./97) :
./94 : tu n'as rien prouvé ni expliqué, je reste sur les raisons données en ./86 ^^

Ne sois pas de mauvaise foi, l'explication de Kevin tient la route -- enfin ta solution marche aussi, mais je trouve que c'est un peu overkill de se priver entièrement des déclarations multiples juste pour éviter le piège des pointeurs :/ (et quoi qu'il en soit, si tu relis du code de qqun d'autre tu es bien obligé d'être conscient de ce bug du C, donc je ne sais pas si tu gagnes grand-chose)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

105

faudrait faire une fonction dont le code contient une illustration de toutes les nuances d'indentation possible, à la "The quick brown fox jumps over the lazy dog".

On pourrait filer ce bout de code à un indenteur pour qu'il l'indente suivant le même style.

106

Zephyr (./86) :
int *a; n'a pas tellement de sens

Je ne comprends pas ce qui te gêne dans le fait de dire que "*a est un entier" (ou encore : "la case mémoire vers laquelle a pointe contient un entier").
avatar
I'm on a boat motherfucker, don't you ever forget

107

Jyaif (./105) :
faudrait faire une fonction dont le code contient une illustration de toutes les nuances d'indentation possible, à la "The quick brown fox jumps over the lazy dog".

On pourrait filer ce bout de code à un indenteur pour qu'il l'indente suivant le même style.

I y a déjà ça dans eclipse (enfin plus ou moins, c'est en plusieurs parties, mais c'est vraiment pas mal)

108

dualmoo (./106) :
Zephyr (./86) :
int *a; n'a pas tellement de sens

Je ne comprends pas ce qui te gêne dans le fait de dire que "*a est un entier" (ou encore : "la case mémoire vers laquelle a pointe contient un entier").

Je suppose qu'il veut dire que le type, c'est "pointeur d'entier" et la variable c'est "a".

109

Comme le disent Onur et Rintintin, le code devrait pouvoir être lisible sans trop avoir besoin de commenter, et je pense comme PpHd que mettre le { à la ligne rend le code moins compact. C'est une moins grande quantité de code qu'on a sous les yeux (et même si on est pas en mode texte) et au final on est moins productif. Les commentaires jouent aussi beaucoup dans la densité du code.

Steve Yegge a d'ailleurs récemment parlé de ça dans un de ces pavés, Portrait of a n00b. Ça traite aussi du fait de trop modéliser le code, et j'ai trouvé ça plutôt intéressant. J'imagine que ça va horrifier JackosKing par contre.
For instance, as just one random illustrative example, you might need to return 2 values from a function in Java (a language with no direct support for multiple return values). Should you model it as a MyFunctionCallResult class with named ValueOne and ValueTwo fields (presumably with actual names appropriate to the problem at hand)? Or should you just return a 2-element array (possibly of mixed types) and have the caller unpack it?

Sinon, quand on regarde l'exemple de Python comparé aux autres langages, on voit quand même bien la différence au niveau du rapport signal à bruit…
avatar
;)

110

Doxygen est effectivement super sympa pour comprendre du code bien ou mal commenté... sauf quand on lui donne à manger du code qui utilise __attribute__ partout sans protection, et qu'on ne connaît pas encore le workaround de mettre "__attribute__(X)=" dans PREDEFINED.
Doxygen n'aime pas du tout ça, et ça peut avoir des conséquences bien au-delà de fonctions ou variables s'appelant __attribute__(...) tsss
(Le fait de ne pas savoir ignorer purement et implement les __attribute__ est une missing feature connue depuis plus de deux ans.)
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

111

Pen^2 (./108) :
dualmoo (./106) :
Zephyr (./86) :
int *a; n'a pas tellement de sens

Je ne comprends pas ce qui te gêne dans le fait de dire que "*a est un entier" (ou encore : "la case mémoire vers laquelle a pointe contient un entier").

Je suppose qu'il veut dire que le type, c'est "pointeur d'entier" et la variable c'est "a".

Ben c'est une façon de le voir, mais l'autre façon est compréhensible aussi, non ?
avatar
I'm on a boat motherfucker, don't you ever forget

112

En cadeau pour vous, un extrait de Linux 0.1 (kernel/mktime.h) avec les commentaires de son auteur:

#include <time.h>

/*
* This isn't the library routine, it is only used in the kernel.
* as such, we don't care about years<1970 etc, but assume everything
* is ok. Similarly, TZ etc is happily ignored. We just do everything
* as easily as possible. Let's find something public for the library
* routines (although I think minix times is public).
*/
/*
* PS. I hate whoever though up the year 1970 - couldn't they have gotten
* a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy.
*/
#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)

/* interestingly, we assume leap-years */
static int month[12] = {
0,
DAY*(31),
DAY*(31+29),
DAY*(31+29+31),
DAY*(31+29+31+30),
DAY*(31+29+31+30+31),
DAY*(31+29+31+30+31+30),
DAY*(31+29+31+30+31+30+31),
DAY*(31+29+31+30+31+30+31+31),
DAY*(31+29+31+30+31+30+31+31+30),
DAY*(31+29+31+30+31+30+31+31+30+31),
DAY*(31+29+31+30+31+30+31+31+30+31+30)
};

long kernel_mktime(struct tm * tm)
{
long res;
int year;

year = tm->tm_year - 70;
/* magic offsets (y+1) needed to get leapyears right.*/
res = YEAR*year + DAY*((year+1)/4);
res += month[tm->tm_mon];
/* and (y+2) here. If it wasn't a leap-year, we have to adjust */
if (tm->tm_mon>1 && ((year+2)%4))
res -= DAY;
res += DAY*(tm->tm_mday-1);
res += HOUR*tm->tm_hour;
res += MINUTE*tm->tm_min;
res += tm->tm_sec;
return res;
}
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

113

dualmoo (./111) :
Pen^2 (./108) :
dualmoo (./106) :
Zephyr (./86) :
int *a; n'a pas tellement de sens

Je ne comprends pas ce qui te gêne dans le fait de dire que "*a est un entier" (ou encore : "la case mémoire vers laquelle a pointe contient un entier").

Je suppose qu'il veut dire que le type, c'est "pointeur d'entier" et la variable c'est "a".

Ben c'est une façon de le voir, mais l'autre façon est compréhensible aussi, non ?

Compréhensible oui, mais elle me semble beaucoup moins logique, je préfère marquer la séparation entre le nom de la variable (a) et son type (int*).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

114

dualmoo (./111) :
Ben c'est une façon de le voir, mais l'autre façon est compréhensible aussi, non ?
Vaguement, oui, mais c'est moins cohérent... Je comprends ce que tu veux dire, à savoir qu'après cette déclaration, « *a » aura toujours le type entier, mais la variable que tu déclares c'est a, pas *a ; ce dernier c'est le résultat d'une opération. Alors il se trouve que c'est pas n'importe quelle opération et que si tu connais le type de *a tu peux en déduire le type de a, mais déclarer que « la case mémoire vers où pointe a contient un entier » est un peu bizarre dans la mesure où a ne pointe pas toujours vers la même case mémoire (et au moment de la déclaration ne pointe vers rien du tout). L'effet de la déclaration est bien de dire que « a contient l'adresse d'un entier », pas autre chose.

(Tout ceci ne m'empêche pas d'écrire int *a, mais bon je trouve pas ça logique pour autant cheeky)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

115

BiHi (./109) :
For instance, as just one random illustrative example, you might need to return 2 values from a function in Java (a language with no direct support for multiple return values). Should you model it as a MyFunctionCallResult class with named ValueOne and ValueTwo fields (presumably with actual names appropriate to the problem at hand)? Or should you just return a 2-element array (possibly of mixed types) and have the caller unpack it?

Personnellement, je ferais une méthode de signature (par exemple) bool func(int ret1[], double ret2[])ret1 et ret2 doivent être des tableaux à 1 élément, mais ça doit être l'habitude du C et du passage par pointeur. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

116

Sally (./114) :
Vaguement, oui, mais c'est moins cohérent... Je comprends ce que tu veux dire, à savoir qu'après cette déclaration, « *a » aura toujours le type entier, mais la variable que tu déclares c'est a, pas *a ; ce dernier c'est le résultat d'une opération. Alors il se trouve que c'est pas n'importe quelle opération et que si tu connais le type de *a tu peux en déduire le type de a, mais déclarer que « la case mémoire vers où pointe a contient un entier » est un peu bizarre dans la mesure où a ne pointe pas toujours vers la même case mémoire (et au moment de la déclaration ne pointe vers rien du tout). L'effet de la déclaration est bien de dire que « a contient l'adresse d'un entier », pas autre chose.

Mais "la case mémoire vers où pointe a contient un entier" est bien l'idée du C, ça fait partie du concept "on déclare les variables comme on les utilise". C'est pour ça aussi qu'un pointeur sur un tableau se déclare int (*foo)[10];: pour accéder à foo, il faut d'abord déréférencer un pointeur, puis prendre un élément, donc c'est comme ça qu'on déclare le type. L'idée est bien "(*foo)[10] est de type int", même si évidemment on n'a pas le droit d'accéder à l'élément [10] du tableau.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

117

Moui, et c'est aussi pour ça que quand on doit faire du typecast on comprend plus rien à la syntaxe cheeky
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

118

Kevin Kofler (./43) :
C'est l'accolade à part qui est sick.gif , sauf pour les fonctions:
void foo(void) { ... } comme prévu par K&R.

ah, je savais pas que je faisais comme K&R smile
Zephyr (./61) :
L'indentation en espaces sux ^^

toutafé. C'est une perte de temps d'appuyer 8 fois sur espace quand on veut naviguer vite au clavier dans son code embarrassed
Lionel Debroux (./70) :
C'est une source d'ennuis, les blocs if/else, for, while sans accolades...

ça d'accord, j'hésite pas à mettre des {} même pour une instruction.
Kevin Kofler (./79) :
int *a; est correct, int* n'existe pas en C, la preuve, comme déjà soulevé par Zephyr, int* a, b; ne va pas faire ce que vous attendez, c'est int *a, *b; qu'il faut mettre.

typedef int* int_p;
int_p a,b;
trigni
Ximoon (./95) :
(c'est moche de déclarer plusieurs variables sur une même ligne)

je fais par thème:
int x,y; /*le point que je traite*/
double lat,lon; /*même genre*/
int i,j; /*indices de boucle de cette fonction*/
Sasume (./103) :
Iterator it; Iterator_init(&it, &(this->enemies));

rah, mais si tu veux des itérateurs et plein de trucs comme ça, fais du C++
que c'est moche de faire ça en C sick

119

squalyl (./118) :
toutafé. C'est une perte de temps d'appuyer 8 fois sur espace quand on veut naviguer vite au clavier dans son code embarrassed

Certains pourraient te répondre qu'avec un vrai éditeur le fait d'appuyer sur "home" place le curseur au début de la ligne, après les éventuels espaces et tabulations, mais je reste d'accord hehe
typedef int* int_p;
int_p a,b;
trigni

Alors ça par contre c'est pire que tout sick
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

120

typedef int* int_p; int_p a,b;

sick
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.