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.

#901 Le 01/05/2010, à 14:06

grim7reaper

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

C'est softtabstop avec 2 t c'est pour ça (mathieuI s'est planté tongue), les autres je ne sais pas, je ne les connais pas

Dernière modification par grim7reaper (Le 01/05/2010, à 14:06)

Hors ligne

#902 Le 01/05/2010, à 14:12

Кຼزດ

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

grim7reaper a écrit :

C'est softtabstop avec 2 t c'est pour ça (mathieuI s'est planté tongue), les autres je ne sais pas, je ne les connais pas

ah zut, j'aurais dû copier/coller tongue


dou

Hors ligne

#903 Le 01/05/2010, à 14:41

Pylades

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

OK, merci ça marche. wink
En plus, ça va me permettre de réindenter un bloc de 70 lignes sans problème pour pouvoir supprimer un return de plus. J’en ai déjà supprimé deux autres, plus trois remplacés par des break, plus ceux virés hier… C’est bon, ma moyenne de return par fonction se rapproche de 1. 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

#904 Le 01/05/2010, à 14:46

grim7reaper

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

C'est bien, faudra que je vois le code une fois terminé.

Il n'a sûrement plus rien à voir avec le dernier que j'ai vu  wink.

Au fait tu t'es décidé pour la licence ?

Hors ligne

#905 Le 01/05/2010, à 14:51

Кຼزດ

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

grim7reaper a écrit :

C'est bien, faudra que je vois le code une fois terminé.

Il n'a sûrement plus rien à voir avec le dernier que j'ai vu  wink.

Au fait tu t'es décidé pour la licence ?

PPL ?


dou

Hors ligne

#906 Le 01/05/2010, à 15:11

grim7reaper

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

Private Pilot Licence ???

Hors ligne

#907 Le 01/05/2010, à 15:15

Кຼزດ

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

grim7reaper a écrit :

Private Pilot Licence ???

Proteste Public Licence tongue


dou

Hors ligne

#908 Le 01/05/2010, à 15:16

grim7reaper

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

Ha ok (ptain, j'ai failli te demander un lien, puis j'ai compris lol).

Hors ligne

#909 Le 01/05/2010, à 15:28

Pylades

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

grim7reaper a écrit :

C'est bien, faudra que je vois le code une fois terminé.

Il n'a sûrement plus rien à voir avec le dernier que j'ai vu  wink.

Au fait tu t'es décidé pour la licence ?

Le code a évolué, il est plus joli maintenant, je trouve. Il est encore perfectible, et il pas fini, et en plus il faut que j’ajoute une gestion des erreurs digne de ce nom. Avec cette nouvelle clarté, je ne pense plus avoir de memory leak, c’est cool. Tu veux le voir maintenant, ou je le travaille encore un peu ?

Pour la licence, je crois que que je vais m’orienter vers la GPL (après avoir longuement hésité avec la WTFPL 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

#910 Le 01/05/2010, à 15:30

tshirtman

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

grim7reaper a écrit :

Bah le C++ c'est tout aussi abscon (et sur une seule ligne je crois) quand tu a des erreurs avec des templates (puis bon, là, ton exemple c'est avec de l'interface on peut avoir le même genre de base).

Edit : @helly : j'avais pas vu ton post roll.

3 langages, de l'abus ! Non mais lol quoi, tu veux vraiment faire développeur ou bien ...
Honnêtemment, un langage, tu as les bases rapidement.
Ensuite il faut que t'apprennes un truc obligatoire en informatique : l'auto-formation, faut pas croire que les cours suffisent et il faut pas que t'attendent les connaissances mais que tu ailles les chercher.
Et puis regarde, tu n'as vu "que" le C et le C++ et tu as vu ton niveau dans ces langages (c'est pas méchant hein, je sais bien que tu n'es pas la seule responsable, l'enseignement y est pour beaucoup). Donc le fait d'en voir plusieurs ne doit pas être un problème (et puis ça ne seras pas pire, quitte survoler, autant en survoler 3 que un tongue).

Sinon le Java est aussi proche du C++ que le Python de l'assembleur (bon j'exagère un peu mais c'est ça l'idée).

+1 sauf pour la dernière ligne, le java n'est pas très différent du C++, il force plus l'objet (tout est classe, même main), et abstrait quelques trucs de plus (garbage collector, structures de données plus haut niveau), mais sinon ce n'est pas sensiblement différent.

Le python est une couche d'abstraction énorme par rapport au C, qui est un est aussi une abstraction (moins énorme mais très efficace) au dessus de l'assembleur...

grim7reaper a écrit :

Ouais enfin quand tu bosses sous du AS400 ou du P5 tu oublies nano, Emacs & cie car tu n'as que Vi (bon emacs est dispo pour P5 mais pas de base, pour AS400 je ne sais pas).

Au moins avec Vi(m), tu n'es jamais depaysé smile.

t'as déjà bossé sur AS400? tongue

Dernière modification par tshirtman (Le 01/05/2010, à 15:31)

Hors ligne

#911 Le 01/05/2010, à 15:57

tshirtman

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

mathieuI a écrit :
Pylade a écrit :

Sinon, j’ai envie de lancer un gros troll sur les règles d’indentation. Tabulation ou espaces ? Là, je suis en train d’indenter à coups de quatre espaces, parce que c’est ce que me faisais mon ancien IDE et que je ne vais pas changer de règle en cours de route, mais ça ne m’a pas l’air très joli, alors je me suis dit qu’on pouvait y mettre un coup de sed…

set expandtab
set shiftwidth=4
set softabstop=4
set tabstop=4
set foldenablehilight RedundantSpaces ctermbg=red guibg=red
match RedundantSpaces /\s\+$\| \+\ze\t\|\t/

tongue

heu, non seulement je ne connaissait pas les deux dernières lignes mais elles ne sont pas reconnus chez moi, tu as quoi comme vim?

Hors ligne

#912 Le 01/05/2010, à 16:09

Кຼزດ

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

tshirtman a écrit :
mathieuI a écrit :
Pylade a écrit :

Sinon, j’ai envie de lancer un gros troll sur les règles d’indentation. Tabulation ou espaces ? Là, je suis en train d’indenter à coups de quatre espaces, parce que c’est ce que me faisais mon ancien IDE et que je ne vais pas changer de règle en cours de route, mais ça ne m’a pas l’air très joli, alors je me suis dit qu’on pouvait y mettre un coup de sed…

set expandtab
set shiftwidth=4
set softabstop=4
set tabstop=4
set foldenablehilight RedundantSpaces ctermbg=red guibg=red
match RedundantSpaces /\s\+$\| \+\ze\t\|\t/

tongue

heu, non seulement je ne connaissait pas les deux dernières lignes mais elles ne sont pas reconnus chez moi, tu as quoi comme vim?

Oops,

set foldenable
highlight RedundantSpaces ctermbg=red guibg=red
match RedundantSpaces /\s\+$\| \+\ze\t\|\t/

Fixed tongue


dou

Hors ligne

#913 Le 01/05/2010, à 16:47

Pylades

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

OK, c’est mieux comme ça. wink
Mais je me pose en question : comment faire pour les règles d’indentation définies ne s’appliquent que pour le C ? Parce que pour faire un makefile, il me semble que la tabulation est obligatoire… hmm


“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

#914 Le 01/05/2010, à 16:58

grim7reaper

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

Pylade a écrit :
grim7reaper a écrit :

C'est bien, faudra que je vois le code une fois terminé.

Il n'a sûrement plus rien à voir avec le dernier que j'ai vu  wink.

Au fait tu t'es décidé pour la licence ?

Le code a évolué, il est plus joli maintenant, je trouve. Il est encore perfectible, et il pas fini, et en plus il faut que j’ajoute une gestion des erreurs digne de ce nom. Avec cette nouvelle clarté, je ne pense plus avoir de memory leak, c’est cool. Tu veux le voir maintenant, ou je le travaille encore un peu ?

Pour la licence, je crois que que je vais m’orienter vers la GPL (après avoir longuement hésité avec la WTFPL tongue).

Je veux bien le voir maintenant, c'est le week-end donc j'ai un peu plus de temps qu'en semaine.
Tu as une petite idée de la manière dont tu vas gérer les erreurs ?

tshirtman a écrit :

+1 sauf pour la dernière ligne, le java n'est pas très différent du C++, il force plus l'objet (tout est classe, même main), et abstrait quelques trucs de plus (garbage collector, structures de données plus haut niveau), mais sinon ce n'est pas sensiblement différent.

Je trouve quand même que ces 2 langages sont bien différents (et ça se ressent au niveau de leurs domaines de prédilection, car il sont rarement en concurrence).
Le C++ :
- est compilé (le java peut aussi l'être je sais, mais ce n'est pas le choix le plus répandu);
- permet l'héritage multiple (le Java, lui, c'est les interfaces qui y ressemblent);
- permet la surdéfinition des opérateurs;
- possède les pointeurs (bien qu'il soit d'usage de les utiliser avec parcimonie);
- passage de paramètres par valeur, pointeurs ou références;
- et 2-3 autres petits truc que j'ai oubliés.
Le Java, lui, possède une énorme bibliothèque standard (et beaucoup offre plus de facilité pour faire du web) par rapport au C++.

Donc hormis le fait que ce sont 2 langages qui supportent la POO et l'implémente de façon proche (mais différentes sur certains point), je ne leurs trouve pas de réels points communs.

Le python est une couche d'abstraction énorme par rapport au C, qui est un est aussi une abstraction (moins énorme mais très efficace) au dessus de l'assembleur...

La comparaison n'est pas très juste, mais c'était avant tout une caricature pour montrer l'idée.

t'as déjà bossé sur AS400? tongue

Pas encore, mais je vais probablement pas tarder à y toucher (pour le moment je l'ai vu qu'en théorie, avec son système de fichier objet et sa BDD intégré au noyau ça fait un peu bizarre).

Hors ligne

#915 Le 01/05/2010, à 17:06

Pylades

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

grim7reaper a écrit :

Tu as une petite idée de la manière dont tu vas gérer les erreurs ?

Ouais. Quand je détecte une erreur, je mets à jour la structure de retour, et je passe à l’argument suivant.

OK, je vais passer tout le code (d’ailleurs cela va arranger ma paranoïa : j’ai peur qu’il arrive un truc, que je perde le code tongue), mais avant, il m’est passé quelque chose par la tête : all ça doit aussi être une phony target, non ?


“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

#916 Le 01/05/2010, à 17:14

grim7reaper

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

Non, car normalement cette cible à des dépendances. Et tu ne veux l'exécuter que si nécessaire (alors que clean tu veux toujours l'exécuter quand tu l'appelles)

Hors ligne

#917 Le 01/05/2010, à 17:28

Pylades

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

grim7reaper a écrit :

Non, car normalement cette cible à des dépendances. Et tu ne veux l'exécuter que si nécessaire (alors que clean tu veux toujours l'exécuter quand tu l'appelles)

Et si il existe un fichier all récent ? Dans ce cas là rien n’est fait, non ?
De toutes façons, s’il n’y a rien à faire, ce n’est pas mettre all en phony qui fera exécuter des trucs inutilement. hmm

Bon, le code n’est pas commenté, il est loin d’être parfait, mais il arrive.
Par ailleurs, j’ai vu que pour le programme de debug, les fonctions déclarées avec static ne sont même pas vues. Donc je prends un warning pour chaque prototype static dans mon header. hmm Donc en fait je vais devoir refaire un beau header bien propre, c’est ça ?

Bon, j’envoie le tout. 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

#918 Le 01/05/2010, à 17:30

Pylades

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

Et allons-y, c’est parti ! \o/

Makefile:

CC=gcc
AR=ar
MAIN_CFLAGS=-std=c89 -pedantic -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wunreachable-code
DEBUG_CFLAGS=-g -O0
RELEASE_CFLAGS=-O2
MAIN_LDFLAGS=-shared -Wl,-soname,libopt.so.0
DEBUG_LDFLAGS=
RELEASE_LDFLAGS=-s
LIB=libopt.a libopt.so.0.1-a1

ifeq ($(DEBUG),true)
CFLAGS=$(DEBUG_CFLAGS) $(MAIN_CFLAGS)
LDFLAGS=$(DEBUG_LDFLAGS) $(MAIN_LDFLAGS)
else
CFLAGS=$(RELEASE_CFLAGS) $(MAIN_CFLAGS)
LDFLAGS=$(RELEASE_LDFLAGS) $(MAIN_LDFLAGS)
endif


all: $(LIB)

libopt.a: atropt.o user.o
	$(AR) rcs $@ $^

libopt.so.0.1-a1: atropt.pic.o user.pic.o
	$(CC) $(LDFLAGS) $^ -o $@

atropt.o: atropt.c atropt.h
	$(CC) $(CFLAGS) $< -c -o $@

atropt.pic.o: atropt.c atropt.h
	$(CC) $(CFLAGS) -fpic $< -c -o $@

atropt.h: user.h

user.o: user.c user.h
	$(CC) $(CFLAGS) $< -c -o $@

user.pic.o: user.c user.h
	$(CC) $(CFLAGS) -fpic $< -c -o $@

.PHONY: clean mrproper

clean:
	@rm -f *.o

mrproper: clean
	@rm -f $(LIB)

user.h:

#ifndef USER_H_INCLUDED
#define USER_H_INCLUDED
#include <stdlib.h>

struct option
{
	char active;
	const char* short_act;
	const char** long_act;
	const char* short_unact;
	const char** long_unact;
	char takes_value;
	char* value;
};
struct retr
{
    int argsc;
    char** argsv;
    int errsc;
    const char** errsv;
    int* errsarg;
};
struct option* new_option(void);
int new_long_option(struct option*,char,const char*);
void delete_option(struct option**);
struct option** new_option_table(int);
void delete_option_table(struct option***);
void delete_return(struct retr**);
#endif /* USER_H_INCLUDED */

user.c:

#include "user.h"

struct option* new_option(void)
{
    struct option* opt=malloc(sizeof *opt);
    if(opt)
    {
        opt->active=0;
        opt->short_act="";
        opt->short_unact="";
        opt->takes_value=0;
        opt->value=NULL;
        opt->long_act=malloc(sizeof *opt->long_act);
        opt->long_unact=malloc(sizeof *opt->long_unact);
        if(opt->long_act&&opt->long_unact)
        {
            opt->long_act[0]=NULL;
            opt->long_unact[0]=NULL;
        }
        else
        {
            free(opt->long_act);
            free(opt->long_unact);
            free(opt);
            opt=NULL;
        }
    }
    return opt;
}

int new_long_option(struct option* ptr,char act,const char* str)
{
    int i=-1;
    while(str[++i]!='\0')
        if(str[i]=='=')
            return -1;
    if(!i)
        return -1;
    i=0;
    if(act)
    {
        while(ptr->long_act[i++]!=NULL);
        ptr->long_act=realloc(ptr->long_act,(sizeof *ptr->long_act)*(i+1));
        if(!ptr->long_act)
            return -1;
        ptr->long_act[i-1]=str;
        ptr->long_act[i]=NULL;
    }
    else
    {
        while(ptr->long_unact[i++]!=NULL);
        ptr->long_unact=realloc(ptr->long_unact,(sizeof *ptr->long_unact)*(i+1));
        if(!ptr->long_unact)
            return -1;
        ptr->long_unact[i-1]=str;
        ptr->long_unact[i]=NULL;
    }
    return 0;
}

void delete_option(struct option** ptr)
{
    free((*ptr)->long_act);
    free((*ptr)->long_unact);
    free(*ptr);
    *ptr=NULL;
}

struct option** new_option_table(int n)
{
    int i;
    struct option** opt_tab=malloc((sizeof *opt_tab)*(n+1));
    if(opt_tab)
    {
        for(i=0;i<n;i++)
        {
            opt_tab[i]=new_option();
            if(!opt_tab[i])
            {
                delete_option_table(&opt_tab);
                return NULL;
            }
        }
        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);
    *ptr=NULL;
}

void delete_return(struct retr** ptr)
{
    free((*ptr)->argsv);
    (*ptr)->argsv=NULL;
    free((*ptr)->errsv);
    (*ptr)->errsv=NULL;
    free((*ptr)->errsarg);
    (*ptr)->errsarg=NULL;
    free(*ptr);
    *ptr=NULL;
}

atropt.h:

#ifndef ATROPT_H_INCLUDED
#define ATROPT_H_INCLUDED
#include <stdlib.h>
#include "user.h"

struct retr* atropt(int,char**,struct option**);
#endif /* ATROPT_H_INCLUDED */

atropt.c:

#include "atropt.h"
static int atrlongopt(char**,int,struct option**,struct retr**);
static int str2cnt(const char*,const char*);
static int deleq(char*);
static struct retr* new_return(void);
static int new_return_arg(struct retr**,char*);
static int new_return_error(struct retr**,const char*,int);

static int str2cnt(const char* s1,const char* s2)
{
    int i=0;
    while(s1[i]==s2[i])
    {
        if(s1[i]=='\0')
            return i;
        i++;
    }
    return 0;
}

static int deleq(char* str)
{
    int i=-1;
    while(str[++i]!='\0')
        if(str[i]=='=')
        {
            str[i]='\0';
            return i;
        }
    return -1;
}

static struct retr* new_return(void)
{
    struct retr* ret=malloc(sizeof *ret);
    if(ret)
    {
        ret->argsc=0;
        ret->errsc=0;
        ret->argsv=malloc(sizeof *ret->argsv);
        ret->errsv=malloc(sizeof *ret->errsv);
        ret->errsarg=malloc(sizeof *ret->errsarg);
        if(ret->argsv&&ret->errsv&&ret->errsarg)
        {
            ret->argsv[0]=NULL;
            ret->errsv[0]=NULL;
            ret->errsarg[0]=0;
        }
        else
        {
            free(ret->argsv);
            free(ret->errsv);
            free(ret->errsarg);
            free(ret);
            ret=NULL;
        }
    }
    return ret;
}

static int new_return_arg(struct retr** ret,char* arg)
{
    int r=-1;
    int i=0;
    while((*ret)->argsv[i++]);
    (*ret)->argsv=realloc((*ret)->argsv,(sizeof *(*ret)->argsv)*(i+1));
    if((*ret)->argsv)
    {
        r=0;
        (*ret)->argsv[i-1]=arg;
        (*ret)->argsv[i]=NULL;
        (*ret)->argsc=i;
    }
    return r;
}

static int new_return_error(struct retr** ret,const char* err,int arg)
{
    int r=-1;
    int i=0;
    while((*ret)->errsv[i++]);
    (*ret)->errsv=realloc((*ret)->errsv,(sizeof *(*ret)->errsv)*(i+1));
    (*ret)->errsarg=realloc((*ret)->errsarg,(sizeof *(*ret)->errsarg)*i);
    if((*ret)->errsv&&(*ret)->errsarg)
    {
        r=0;
        (*ret)->errsv[i-1]=err;
        (*ret)->errsv[i]=NULL;
        (*ret)->errsc=i;
        (*ret)->errsarg[i-1]=arg;
    }
    return r;
}

static int atrlongopt(char** argv,int argn,struct option** optv,struct retr** ret)
{
    /* /!\ To be fixed (pasted from function atropt) /!\ */
    int r=0;
    short optn;
    int eq=deleq(argv[argn]+2);
    if(!eq)
    {
        r=1;
        argv[argn][2]='=';
        if(new_return_error(ret,"illegal '='",argn))
            r=-1;
    }
    else
    {
        for(optn=0;optv[optn]!=NULL;optn++)
        {
            short lgn;
            for(lgn=0;optv[optn]->long_unact[lgn]!=NULL;lgn++)
                if(str2cnt(optv[optn]->long_unact[lgn],(const char*) argv[argn]+2))
                    optv[optn]->active=0;
            /* À revoir (copié-collé des options courtes)
            for(lgn=0;optv[optn]->long_act[lgn]!=NULL;lgn++)
            {
                /!\if(optv[optn]->long_act[lgn],argv[argn]+2)
                {
                    optv[optn]->active=1;
                    if(optv[optn]->takes_value==1)
                        next=optv[optn];
                }/!\
            }*/
        }
    }
    return r;
}

struct retr* atropt(int argc,char** argv,struct option** optv)
{
    char skip=0;
    struct option* next=NULL;
    short argn;
    struct retr* ret=new_return();
    if(ret)
    {
        for(argn=1;argn<argc;argn++)
        {
            short s_flag=0;
            if(argv[argn][0]=='-'&&!skip)
            {
                if(argv[argn][1]=='\0')
                {
                    if(new_return_arg(&ret,argv[argn]))
                    {
                        delete_return(&ret);
                        break;
                    }
                    continue;
                }
                if(argv[argn][1]!='-')
                {
                    while(argv[argn][++s_flag]!='\0')
                    {
                        short optn;
                        for(optn=0;optv[optn]!=NULL;optn++)
                        {
                            short shn;
                            for(shn=0;optv[optn]->short_unact[shn]!='\0';shn++)
                                if(optv[optn]->short_unact[shn]==argv[argn][s_flag])
                                    optv[optn]->active=0;
                            for(shn=0;optv[optn]->short_act[shn]!='\0';shn++)
                                if(optv[optn]->short_act[shn]==argv[argn][s_flag])
                                {
                                    optv[optn]->active=1;
                                    if(optv[optn]->takes_value==1)
                                        next=optv[optn];
                                }
                        }
                    }
                }
                else
                {
                    if(argv[argn][2]=='\0')
                        skip=1;
                    else
                    {
                        if(atrlongopt(argv,argn,optv,&ret)==-1)
                        {
                            delete_return(&ret);
                            break;
                        }
                    }
                }
            }
            else
            {
                if(next!=NULL)
                {
                    next->value=argv[argn];
                    next=NULL;
                }
                else
                {
                    if(new_return_arg(&ret,argv[argn]))
                    {
                        delete_return(&ret);
                        break;
                    }
                }
            }
        }
    }
    return ret;
}

debug.c:

#include <stdio.h>
#include <stdlib.h>
#include "/home/paul/libopt/atropt.h"
#include "/home/paul/libopt/user.h"

int main(int argc,char** argv)
{
    struct option** optv=new_option_table(2);
    struct retr* ret1;
    int i=-1;
    optv[0]->short_act="d";
    if(new_long_option(optv[0],0,"una")==-1) exit(-1);
    optv[1]->short_act="fi";
    optv[1]->short_unact="r";
    ret1=atropt(argc,argv,optv);
        if(!ret1) exit(-1);
    if(optv[0]->active)
        puts("optv[0] active!");
    if(optv[1]->active)
        puts("optv[1] active!");
    delete_option_table(&optv);
    while((ret1->argsv)[++i]!=NULL)
        puts((ret1->argsv)[i]);
    puts("--- errors ---");
    i=-1;
    while((ret1->errsv)[++i]!=NULL)
        printf("%s: %s\n",argv[(ret1->errsarg)[i]],(ret1->errsv)[i]);
    delete_return(&ret1);
    return 0;
}

tongue

Dernière modification par Pylade (Le 01/05/2010, à 21:18)


“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

#919 Le 01/05/2010, à 17:35

grim7reaper

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

Pylade a écrit :

Par ailleurs, j’ai vu que pour le programme de debug, les fonctions déclarées avec static ne sont même pas vues. Donc je prends un warning pour chaque prototype static dans mon header. hmm Donc en fait je vais devoir refaire un beau header bien propre, c’est ça ?

Il ne faut pas mettre de prototypes static dans un header, seulement dans un fichier source.
Une fonction déclarée en tant que static, ça signifie que sa portée est limité au fichier objet où elle est déclarée. Si tu la mets dans un header, tu ne peux pas empêcher ce dernier d'être inclus dans 2 fichiers sources différents et donc c'est en conflit avec le static.

Dernière modification par grim7reaper (Le 01/05/2010, à 17:55)

Hors ligne

#920 Le 01/05/2010, à 17:42

Pylades

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

Ok, j’ai édité cette horrible méprise. ^^


“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

#921 Le 01/05/2010, à 18:39

helly

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

Dur dur de réapprendre le c++ quand on pratique (mal) depuis un an hmm


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

#922 Le 01/05/2010, à 19:09

grim7reaper

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

L'important c'est de s'en être rendu compte et de tenter d'y remédier smile.

Hors ligne

#923 Le 01/05/2010, à 19:12

helly

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

Ouais mais pour rebondir sur le java et compagnie, comment faire confiance aux profs ?
(je commence à voir un peu mieux la différence entre c et c++ c'est déjà bien smile )

Dernière modification par helly (Le 01/05/2010, à 19:13)


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

#924 Le 01/05/2010, à 19:32

grim7reaper

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

helly a écrit :

Ouais mais pour rebondir sur le java et compagnie, comment faire confiance aux profs ?
(je commence à voir un peu mieux la différence entre c et c++ c'est déjà bien smile )

En parallèle de ton cours il faut que tu te documentes par toi même : site, forum (développez par exemple) voire livre. En multipliant les sources tu auras divers points de vue et tu pourras avoir un regard critique sur ton cours ce qui te permetra de juger de sa qualité et la pertinence de tel ou tel sujet.
Si tu n'as qu'une seule source tu ne peux pas comparer ni mesurer la qualité de l'enseignement que l'on te donne. Je dis cela pour les cours d'info mais c'est valable pour tout les domaines (c'est juste que, en général, on n'a pas suffisamment de temps pour se permettre de faire ça pour toute les informations que l'on reçoit).
En résumé, tu t'auto-forme en parallèle smile.

Dernière modification par grim7reaper (Le 01/05/2010, à 19:34)

Hors ligne

#925 Le 01/05/2010, à 19:35

helly

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

Ouais mais d'après ce que on (vous) m'a dit , les bouquin c'est comme les profs : y'a des perles et des bouses ...


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