Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#151 Le 15/04/2010, à 16:47

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Pylade a écrit :

Bon. D’après ce que tu m’as dit je crois ça passe. Mais je vais devoir apprendre à utiliser ça correctement…

Oui dans ton cas je pense que c'est OK.

OK. Donc je cast argv au moment de l’appel de ma fonction de attribution des option.

Oui, ça me semble être un bon compromis.

grim7reaper a écrit :

Oui, mais c’est mal de compiler en GNU-C89 ? Je crois qu’il offre quelque fonctionnalité appréciables. Après c’est sûr que si je veux publier mon code, il faut qu’il soit compilable en ISO C90, donc -ansi peut-être une option utile pour s’en assurer. Mais il y a toujours de gens qui ne peuvent compiler qu’en ISO C90 ? Et je suppose que -pedantic est là lui aussi pour me rappeler à l’ordre… Mais il gueule vraiment pour tout. Ce qui me gène, c’est surtout qu’il est intransigeant sur la déclaration des variables… Je trouve ça moche de tout devoir déclarer au début, et surtout on perd des fonctionnalité utiles (je sais, issues du C++, mais utiles quand-même) telles que la déclaration dans une boucle, ou la déclaration à la volée dans un for. C’est vraiment indispensable de s’astreindre à cette sévérité ?

Il y à peu de compilo qui n'implémente pas totalement (et correctement) le standard C99. Tu peux peut-être en trouver sur des architectures très récentes (où le portage de gcc n'est pas terminé) et probablement dans de l'embarqué.
Donc c'est à toi de voir, selon les ambitions de ton projet et les contraintes de portabilité que tu veux lui donner. Il n'y a pas de mauvais choix, mais il faut clairement définir tes objectifs & contraintes dès le début, car la réecriture de code (en cours de route, ou après la fin) c'est chiant et parfois source de bugs.
Pour les extensions GNU tu te limites (si on peut dire, vu que c'est le compilo disponibles sur le plus d'archi différente) à la compilation par gcc (pas de compilation avec le compilo Intel, Microsoft tongue, ou autre).
C'est à toi de voir, c'est ton projet donc c'est toi qui vois.

@ǤƦƯƝƬ : j'ai pensé au rot13 aussi, mais ça me semble trop simpliste.

Hors ligne

#152 Le 15/04/2010, à 17:13

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Donc du code en C99 ou GNU-C89 n’est pas portable. OK. Pis comme -ansi implique -trigraphs, qui eux ont vécus leur vie, je vais mettre -std=c89, même si ça ne s’adapte pas au C++ (pour ce que j’en fait, de toutes façons…).
Sinon, c’est bien le compilo Intel ? Il a des avantages par rapport à GCC ?

Bon, je vais nettoyer mon code (pis j’ai compris un truc sur les pointeurs et les tableaux tout à l’heure, comme ça ; ça m’évitera de commettre des erreurs par la suite).


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#153 Le 15/04/2010, à 17:20

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Pylade a écrit :

Donc du code en C99 ou GNU-C89 n’est pas portable. OK. Pis comme -ansi implique -trigraphs, qui eux ont vécus leur vie, je vais mettre -std=c89, même si ça ne s’adapte pas au C++ (pour ce que j’en fait, de toutes façons…).
Sinon, c’est bien le compilo Intel ? Il a des avantages par rapport à GCC ?

Bon, je vais nettoyer mon code (pis j’ai compris un truc sur les pointeurs et les tableaux tout à l’heure, comme ça ; ça m’évitera de commettre des erreurs par la suite).

Si c'est portable, mais à 95%.

Avec -Wall, les trigraphes ne passent pas wink

Pour le compilo d'Intel c'est apparemment le meilleur en terme d'optimisation sur les archi Intel (tu es surpris hein big_smile), mais il a été accusé de saboter sciemment l'optimisation des codes sur AMD (il pourrissait les perf volontairement alors qu'il est capable de faire du bon code pour AMD aussi). Mais je ne sais pas si ça c'est avéré fondé ou pas, je n'ai pas trop suivi le débat (des infos ici).

Dernière modification par grim7reaper (Le 15/04/2010, à 17:22)

Hors ligne

#154 Le 15/04/2010, à 17:42

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

grim7reaper a écrit :

Pour le compilo d'Intel c'est apparemment le meilleur en terme d'optimisation sur les archi Intel (tu es surpris hein big_smile), mais il a été accusé de saboter sciemment l'optimisation des codes sur AMD (il pourrissait les perf volontairement alors qu'il est capable de faire du bon code pour AMD aussi). Mais je ne sais pas si ça c'est avéré fondé ou pas, je n'ai pas trop suivi le débat (des infos ici).

En même temps, qui aurait l’idée de compiler avec le compilo Intel pour du AMD… tongue


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#155 Le 15/04/2010, à 18:25

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

grim7reaper a écrit :

-Wstrict-prototypes est peut-être superlfu (activé par -pedantic ? -ansi ? -Wall ? -Wextra ?).

Surtout parce que je ne pense pas qu’il serve souvent…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#156 Le 15/04/2010, à 18:38

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

@ça évite de faire un prototype

int foo()

Qui en C++ signifie "aucun arguments", mais en C signifie un nombre non spécifié d'argument quelconque.

L'oubli d'un void est rapide lorsque l'on jongle entre les 2 langages (ce qui n'est pas mon cas pour le moment, mais bon, une option de plus ça ne mange pas de pain smile)

Dernière modification par grim7reaper (Le 15/04/2010, à 18:39)

Hors ligne

#157 Le 15/04/2010, à 19:30

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

/me se pose une question… Est-ce que option est un mot réservé, ou plus généralement ai-je le droit de renommer ma structure option (histoire d’être un peu plus explicite que opt). Parce que mon outil d’autocomplétion me propose option quand je tape opti… hmm

Ayé, j’ai fait ma première compilation en :

gcc -g -std=c89 -pedantic -Wall -Wextra -Wwrite-strings -Wunreachable-code

Ça pique un petit peu au début, mais on s’y fait… cool


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#158 Le 15/04/2010, à 19:43

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

C'est une bonne habitude à prendre. C'est le premier pas pour un codage propre smile.

option est libre, ce n'est pas un identificateur réservé. Sinon, personnellement j'opte pour des conventions de nommages (pour les enums, les struct, les typedef, etc.) afin de limiter les risques de collisions. Mais bon ça c'est personnel, ce n'est pas une règle à suivre obligatoirement.

Dernière modification par grim7reaper (Le 15/04/2010, à 19:56)

Hors ligne

#159 Le 15/04/2010, à 20:00

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

grim7reaper a écrit :

Sinon, personnellement j'opte pour des conventions de nommages (pour les enums, les struct, les typedef, etc.) afin de limiter les risques de collisions. Mais bon ça c'est personnel, ce n'est pas une règle à suivre obligatoirement.

En préfixant les identificateurs ?

J’ai finalement implémenté une fonction

struct option* new_option(void);

qui crée la structure et initialise correctement, mais j’hésite entre documenter le fait que les struct option qui ne sont plus utilisées doivent tout simplement se free() ou créer une fonction

int delete_option(struct option);

qui fasse tout simplement un free(), mais qui signifie tout simplement que les structures doivent être libérées. Le problème c’est que c’est inutile ; et que si elle tombe sur un struct option* vers un struct option créé à l’arrache sans utiliser new_option(), elle se casse les dents (je crois)…

C’est possible de balancer un warning quand une structure est crée comme ça, sans utiliser la fonction prévue pour ? Je sais que l’on peut déclarer des fonctions avec l’attribut « warn unused result », alors pourquoi pas… hmm

A+

Dernière modification par Pylade (Le 15/04/2010, à 20:13)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#160 Le 15/04/2010, à 20:05

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Non, principalement en suffixant les types (permet de savoir à quoi on a à faire d'un coup d'oeil sans aller chercher la def dans les headers).

Pour le préfixe des identificateurs je le faisais, mais en ce moment je suis moins catégorique car ma façon de faire est lourde et inesthétique. Il faudrait que je trouve un juste milieu (pour mon projet actuel je l'ai laissé tomber, mais pour mes futurs production j'y reviendrais peut-être).

Sinon, je bloque un peu sur le défi (bon ce soir j'ai pas trop le temps en plus, mais mes premiers tests n'ont pas été concluant hmm).

Dernière modification par grim7reaper (Le 15/04/2010, à 20:06)

Hors ligne

#161 Le 15/04/2010, à 20:07

helly

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bon, je commence mon apprentissage du python , pis je vais aussi prévoir de rectifier mon C++ avec mon bouquin que j'ai redécouvert hier ^^


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#162 Le 15/04/2010, à 20:19

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

En espérant que ça soit un bon bouquin smile

Hors ligne

#163 Le 15/04/2010, à 20:25

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bon, j’édite après la bataille, moi… lol

J’hésite aussi entre faire une fonction qui ne crée qu’une structure option, ou une qui en crée le nombre indiqué, et renvoie le tableau de struct option* déjà tout prêt. Le problème c’est qu’après on se retrouve avec un nommage pas très explicite. hmm
Par exemple, se retrouver avec options[7] au lieu de verbose (avec options un tableau de struct option*, et verbose un struct option*), c’est moins clair.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#164 Le 15/04/2010, à 20:41

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

J'obterais pour la fonction qui ne crée qu'un seul élément car c'est beaucoup plus souple.
Cela dit, tu peux ensuite faire une fonction new_tab_opt qui renvoie un tableau d'options en faisant appel à ta fonction new en interne (ainsi le programmeur à le choix).

Sinon, même si ta structure est simple, je t'inciterais fortement à faire une fonction delete (qui est la duale de la fonction new_opt). C'est une bonne chose pour plusieurs raisons (même si, ici, la simplicité de ta structure le nécessite pas explicitement).
Tout d'abord, cela permet de mettre en œuvre l'encapsulation des données, ce qui est toujours une bonne chose.
Ensuite si un jour ta structure se complexifie (par exemple des champ alloué dynamiquement) et nécessite plus de traitement pour sa libération, tu as juste à mettre à jour le code de ta fonction delete et le programmeur qui utilise ta lib n'y vois que du feu et n'a pas à modifier la moindre ligne de son code ce qui est quelque chose de primordial.

Pylade a écrit :

C’est possible de balancer un warning quand une structure est crée comme ça, sans utiliser la fonction prévue pour ?

En C standard non, en  extension de gcc peut-être mais ça m'étonnerai (en tout cas je n'en ai pas connaissance, mais je n'ai pas la prétention de connaître le man de gcc par cœur smile).

Hors ligne

#165 Le 15/04/2010, à 21:02

Sir Na Kraïou

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#166 Le 15/04/2010, à 21:19

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Р'tite G☢gole mad a écrit :

\o/ forum bug


Hello world

Hors ligne

#167 Le 15/04/2010, à 21:20

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Р'tite G☢gole mad a écrit :

C'est amusant non comme truc LOL


Hello world

Hors ligne

#168 Le 15/04/2010, à 21:22

ceric

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Р'tite G☢gole mad a écrit :


Mac mini 7,1 en dual boot Ubuntu Gnome 22.04.5 [LTS] & macOS (Monterey)
HP elitedesk 800 G2 SFF en single boot Ubuntu Gnome 24.04.1 [LTS]
HP zBook G3 15" en single boot Mageia Gnome 9

Hors ligne

#169 Le 15/04/2010, à 21:25

helly

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#170 Le 15/04/2010, à 21:27

Sir Na Kraïou

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Nan, c'est pas un bug, c'est juste ça : http://www.fileformat.info/info/unicode/char/202e/index.htm


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#171 Le 15/04/2010, à 21:32

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

It's my personnal plop

??=include <stdio.h>
??=include <stdlib.h>
int main(void)
??<
    unsigned int n= 0x2A;
    char* p = (char*)&n;
    n ??'= 0x706F6C7A;
    printf("%c%c%c%c??/n", *p, *(p+1), *(p+2), *(p+3));
    return EXIT_SUCCESS;
??>

Hors ligne

#172 Le 15/04/2010, à 21:41

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

‫‬‭‮‪‫‬‭‮҉Et Amsant aussi ce caractère non ?

Р'tite G☢gole mad a écrit :

Nan, c'est pas un bug, c'est juste ça : http://www.fileformat.info/info/unicode/char/202e/index.htm


Hello world

Hors ligne

#173 Le 15/04/2010, à 22:21

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bon j’ai fait quelques petites fonctions, et je suis assez fier de moi.

struct option* new_option(void);
void delete_option(struct option*);
struct option** new_option_table(int);
void delete_option_table(struct option**);

struct option* new_option(void)
{
    struct option* opt=malloc(sizeof *opt);
    if(opt)
    {
        opt->active=0;
        opt->short_act="";
        /*hum*/
        opt->short_unact="";
        /*hum*/
        opt->takes_value=0;
        opt->value="";
    }
    return opt;
}

void delete_option(struct option* ptr)
{
    free(ptr);
}

struct option** new_option_table(int n)
{
    struct option** opt_tab=malloc((sizeof *opt_tab)*(n+1));
    int i;
    for(i=0;i<n;i++)
        opt_tab[i]=new_option();
    opt_tab[n]=NULL;
    return opt_tab;
}

void delete_option_table(struct option** ptr)
{
    int i;
    for(i=0;ptr[i]!=NULL;i++)
        delete_option(ptr[i]);
    free(ptr);
}

Mais si un con me colle un NULL prématuré dans mon tableau de struct option*, il se passe un truc pas cool lors de l’appel à delete_option_table()… hmm
Donc je ne sais pas si je dois être si fier de moi que ça. Mais bon, il suffit de mettre dans la doc que ce genre de comportement est strictement prohibé, c’est tout ?

Sinon, j’ai une solution pour que les noms des options restent explicite : demander à l’utilisateur de faire une énumération.
Ainsi, on aura opt_tab[verbose], ce qui reste tout à fait compréhensible. big_smile


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#174 Le 15/04/2010, à 22:27

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Raaah, Nausicaä vient de se finir sad:(:(.

Dernière modification par grim7reaper (Le 15/04/2010, à 22:37)

Hors ligne

#175 Le 15/04/2010, à 22:28

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Wah, en utilisant mes nouvelles fonctions, comment que ça simplifie le code du programme de débug ! yikes


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne