IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

un petit défi en C


Sujet :

C

  1. #1
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut un petit défi en C
    Bonsoir,

    Si vous avez le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
     
    int main() {
    #include"snacker.txt"
     
        printf("%d %d %d %d\n");
     
    #include"astuce.txt"
        return 0;
    }
    dont la sortie est : 1 2 3 4 (pas plus que ça et aucune autre erreur)
    quel est le contenu de deux fichiers snacker.txt et astuce.txt ?



    Merci d'avance pour vos participations.

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 875
    Par défaut
    Le contenu de snacker.txt serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("", 1, 2, 3, 4);
    astuce.txt est vide ou alors a un code qui n'a pas d'affichage.

  3. #3
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    Votre code affichera les quatre derniers nombres du stack après avoir affiché l'output demandé.
    La vraie solution montre le coté bas-niveau du langage C.

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 875
    Par défaut
    Par vraie solution tu veux dire ta solution ?

    Celle que j'ai propose repond a tous les criteres. Par-contre j'attends de voir ce que quelqu'un d'autre proposera.

  5. #5
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    Par vraie solution tu veux dire ta solution ?
    Pas nécessairement, la vôtre est bien sûr correcte mais comme elle affiche ce qui est demandé en plus des quatre derniers nombres du stack, il peut y avoir une autre solution meilleure qui peut appartenir à n'importe qui.
    Voici par exemple l'output de votre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1 2 3 4
    0 134513883 -1215778828 134513872
    quant à moi je propose la solution suivante :
    le fichier snacker.txt contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    asm("pushl $4 \n\t"
        "pushl $3 \n\t " 
        "pushl $2 \n\t "
        "pushl $1 \n\t "
        "pushl $0 " );
    et le fichier astuce.txt vide.

    sachant qu'il existe encore des solutions meilleures que je pourrais ajouter ultérieurement après les contributions des membres.



    Merci.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Pas sûr que le côté bas-niveau du C apparaisse mais cette solution répond aux critères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat snacker.txt
    #define printf(a) fprintf(stdout,a,1,2,3,4)
    $ cat astuce.txt
    #undef printf
    @imperio Je n'ai pas la sortie attendue avec ton code, elle dépend probablement du compilateur et de l'architecture utilisés.

  7. #7
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    J'inclus les deux fichiers directement dans le code. Mais je ne vois pas trop ce que tu veux dire par le côté "bas niveau".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "stdio.h"
     
    int main()
    {
     
        #define printf($1) printf($1, 1, 2, 3, 4)
     
        printf("%d %d %d %d\n");
     
        #undef printf
     
        return 0;
    }
    A+

    Pfeuh

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    @pfeuh: c'est la même solution que celle que j'ai proposée à la différence que tu as utilisé un autre nom pour le paramètre de la macro qui ne respecte pas le standard C, ca ne compile donc pas avec d'autres compilateurs que gcc, ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cc b.c -o b
    "b.c", line 5: invalid token in #define macro parameters: $
    cc: acomp failed for b.c
    @snack3r : ta solution n'est pas portable car dépendant de l'architecture du processeur. Elle ne compile pas non plus chez moi:

    avec gcc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ gcc a.c -o a
    a.c: In function ‘main’:
    a.c:10:1: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
    a.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    a.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    a.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    a.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    a.c: Assembler messages:
    a.c:5: Error: invalid instruction suffix for `push'
    a.c:6: Error: invalid instruction suffix for `push'
    a.c:7: Error: invalid instruction suffix for `push'
    a.c:8: Error: invalid instruction suffix for `push'
    a.c:9: Error: invalid instruction suffix for `push'
    Avec cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cc /tmp/a.c -o /tmp/a 2>&1       
    "/tmp/a.c", line 10: warning: implicit function declaration: printf
    Assembler: 
    	"/tmp/yabeCxcBlC", line 20 : Illegal mnemonic
    	Near line: "pushl $4 "
    	"/tmp/yabeCxcBlC", line 21 : Illegal mnemonic
    	Near line: "	pushl $3 "
    	"/tmp/yabeCxcBlC", line 22 : Illegal mnemonic
    	Near line: "	 pushl $2 "
    	"/tmp/yabeCxcBlC", line 23 : Illegal mnemonic
    	Near line: "	 pushl $1 "
    	"/tmp/yabeCxcBlC", line 24 : Illegal mnemonic
    	Near line: "	 pushl $0 "
    Sous Solaris SPARC avec gcc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ gcc a.c -o a
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 15: error: unknown opcode "pushl"
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 15: error: statement syntax
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 16: error: unknown opcode "pushl"
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 16: error: statement syntax
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 17: error: unknown opcode "pushl"
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 17: error: statement syntax
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 18: error: unknown opcode "pushl"
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 18: error: statement syntax
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 19: error: unknown opcode "pushl"
    /usr/ccs/bin/as: "/var/tmp//cclLJ8VR.s", line 19: error: statement syntax
    @imperio: quand elle compile, ta proposition ne produit pas le résultat souhaité (je ne sais pas comment snack3r peut avoir deux lignes en sortie):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ make d
    gcc     d.c   -o d
    d.c: In function ‘main’:
    d.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    d.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    d.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    d.c:10:1: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]
    $ ./d
    4195844 1800960720 18736 1803060992

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    La solution utilisant le préprocesseur est, je pense, la seule qui ne comporte pas de comportement indéfini (ou d'extension spécifique à la plate-forme, comme l'assembler inline).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    La solution utilisant le préprocesseur est, je pense, la seule qui ne comporte pas de comportement indéfini (ou d'extension spécifique à la plate-forme, comme l'assembler inline).
    Tu as sans doute raison : il faut redéfinir le printf(), car celui de la bibliothèque standard ne peut pas être correct :
    Citation Envoyé par n1256
    7.19.6.3 The printf function
    ...
    2 The printf function is equivalent to fprintf with the argument stdout interposed
    before the arguments to printf.

    7.19.6.1 The fprintf function
    ....
    2 ...If there are insufficient arguments for the format, the behavior is
    undefined.

  11. #11
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 875
    Par défaut
    @imperio: quand elle compile, ta proposition ne produit pas le résultat souhaité (je ne sais pas comment snack3r peut avoir deux lignes en sortie):
    @imperio Je n'ai pas la sortie attendue avec ton code, elle dépend probablement du compilateur et de l'architecture utilisés.
    Je compile avec une ancienne version de mingw. Etrange que ca change autant d'un compilateur a l'autre.

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par imperio Voir le message
    Je compile avec une ancienne version de mingw. Etrange que ca change autant d'un compilateur a l'autre.
    Pas tellement étrange.
    Les compilateurs font leur possible pour respecter les standards et produire le résultat attendu avec du code correct. En revanche, tout code incorrect qui passe la compilation produit un résultat indéfini et souvent imprévisible.
    Il n'y a pas de standard C qui spécifie comment les paramètres sont passés aux fonctions (pile, registres, ...) et encore moins leur persistence entre deux appels de fonction.

  13. #13
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    @pfeuh: c'est la même solution que celle que j'ai proposée
    Oui, désolé, mais je n'avais pas vu ton post. J'ai répondu en arrivant au boulot avant même de prendre un café.

    A+

    Pfeuh

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    snacker.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fprintf (stdout, "1 2 3 4");
    return 0;
    Si on veut, on peut ajouter '\n' apres le 4.

    Ensuite, on met ce qu'on veut dans l'autre fichier

    Je sais, ce n'est pas ce que tu attendais snack3r, mais c'est le probleme lorsqu'on pose des problemes/questions trop ouverts.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  15. #15
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    ta solution n'est pas portable car dépendant de l'architecture du processeur
    Oui je sais bien ça, j'ai oublié quand même de dire que la solution est propre à Windows parceque lorsque je l'ai testé avec Mac for Intel, j'ai obtenu des erreurs à cause de la configuration par défaut de xcode.

    Je sais, ce n'est pas ce que tu attendais snack3r, mais c'est le probleme lorsqu'on pose des problemes/questions trop ouverts.
    ta solution est aussi acceptable et correcte, le fait que j'ai laissé la question ouverte c’était pour voir le maximum possible des idées qui peuvent répondre à la question de manières différentes.

    Mon idée c’était tout simplement : passer les paramètres individuellement en utilisant le push dans le stack. bien sur on va avoir toujours besoin de modifier le code lors du passage d'un compilateur à un autre.

    La solution que je propose est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
     
    void GetESP (unsigned int **ptr)
    {
    	*ptr = (unsigned int *) &ptr;
    	return;
    }
     
    int main ()
    {
    	unsigned int *iPtr = NULL;
     
    	GetESP (&iPtr);
     
    	*(iPtr + 1)	= 0x1;
    	*(iPtr + 2)	= 0x2;
    	*(iPtr + 3)	= 0x3;
    	*(iPtr + 4)	= 0x4;
     
    	printf ("%08x %08x %08x %08x");
     
    	getchar ();
    	return 0;
    }

  16. #16
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est une proposition encore plus perverse.

    La fonction GetESP() retourne l'adresse de ptr qui est un paramètre donc une variable locale : on ne doit jamais retourner d'une façon ou d'une autre l'adresse d'une variable locale puisque celle-ci est détruite en sortie de fonction et donc son adresse devient invalide

  17. #17
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par diogene Voir le message
    C'est une proposition encore plus perverse.
    Et qui en plus ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > ./a.out
    65fb9798 65fb96a8 00400580 02d532d0
    Bien sur, il va sans dire que la moindre petite option de compilation, telle -Wall sur GCC, genere un warning sur ces codes, donc on sait deja que ce ne sont que des "bidouilles" pour jouer.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  18. #18
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    @diogene
    L'idée est de récupérer l'adresse du paramètre passé à la fonction GetESP et d'utiliser celui-ci pour affecter de nouvelles valeurs au stack, voici le code d'une autre manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    unsigned int *x ;
    void GetESP (unsigned int a)
    {
        //a has been pushed .. so it has the required adderss
        x=&a;
    }
     
    int main ()
    {
        GetESP(1);
        x[1] = 1;
        x[2] = 2;
        x[3] = 3;
        x[4] = 4;
        printf ("%d %d %d %d");
        getchar ();
        return 0;
    }

  19. #19
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par imperio Voir le message
    Je compile avec une ancienne version de mingw. Etrange que ca change autant d'un compilateur a l'autre.
    Pas étrange du tout. Un comportement indéfini est un comportement indéfini.

    Citation Envoyé par gangsoleil Voir le message
    snacker.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fprintf (stdout, "1 2 3 4");
    return 0;
    Si on veut, on peut ajouter '\n' apres le 4.

    Ensuite, on met ce qu'on veut dans l'autre fichier

    Je sais, ce n'est pas ce que tu attendais snack3r, mais c'est le probleme lorsqu'on pose des problemes/questions trop ouverts.
    C'est surtout la seule voie possible, éviter l'appel qui génèrerait un comportement indéfini (définir une macro printf en est un aussi -- pour commencer une implémentation standard peut déjà définir printf comme une macro).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un petit défi : tester si une chaîne est un nombre romain
    Par rambc dans le forum Général Python
    Réponses: 1
    Dernier message: 09/04/2009, 13h43
  2. Petit défi SQL (Update avec condition)
    Par Angeldu74 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 03/03/2009, 13h55
  3. Petit défi en PHP
    Par davidedj dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 28/08/2006, 19h10
  4. Petit défi de lettres
    Par tiboel dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/03/2006, 01h29
  5. [W3C] Petit défi : Alignement et compatibilité IE et FF
    Par StreM dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/09/2005, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo