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 :

probleme lors de l'execution de mon programme


Sujet :

C

  1. #21
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par millie Voir le message
    En réalité, c'est faux (même si on peut dire que c'est vrai). Par exemple sous Unix, lors de l'édition des liens, on ajoute d'autres fonctions (notamment _start) qui est appelé avant (maintenant, dans la pratique, ça ne sert pas vraiment de savoir ça, je te l'accorde)

    On voit par exemple l'ensemble des symboles supplémentaire avec la commande nm -g.

    Alors, pour s'amuser :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    gdb a.out
    GNU gdb 6.0
    Copyright 2003 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "sparc-sun-solaris2.9"...(no debugging symbols found)...
    (gdb) disassemble _start
    Dump of assembler code for function _start:
    0x000104c8 <_start+0>:  clr  %fp
    0x000104cc <_start+4>:  ld  [ %sp + 0x40 ], %l0
    0x000104d0 <_start+8>:  add  %sp, 0x44, %l1
    0x000104d4 <_start+12>: sub  %sp, 0x20, %sp
    0x000104d8 <_start+16>: tst  %g1
    0x000104dc <_start+20>: be  0x104ec <_start+36>
    0x000104e0 <_start+24>: mov  %g1, %o0
    0x000104e4 <_start+28>: call  0x207a8 <_PROCEDURE_LINKAGE_TABLE_+48>
    0x000104e8 <_start+32>: nop
    0x000104ec <_start+36>: sethi  %hi(0x10400), %o0
    0x000104f0 <_start+40>: or  %o0, 0x32c, %o0     ! 0x1072c <_fini>
    0x000104f4 <_start+44>: call  0x207a8 <_PROCEDURE_LINKAGE_TABLE_+48>
    0x000104f8 <_start+48>: nop
    0x000104fc <_start+52>: call  0x10710 <_init>
    0x00010500 <_start+56>: nop
    0x00010504 <_start+60>: mov  %l0, %o0
    0x00010508 <_start+64>: mov  %l1, %o1
    0x0001050c <_start+68>: sll  %l0, 2, %o2
    0x00010510 <_start+72>: add  %o2, 4, %o2
    0x00010514 <_start+76>: add  %l1, %o2, %o2
    0x00010518 <_start+80>: sethi  %hi(0x20800), %o3
    0x0001051c <_start+84>: or  %o3, 0x10c, %o3     ! 0x2090c <environ>
    0x00010520 <_start+88>: st  %o2, [ %o3 ]
    0x00010524 <_start+92>: call  0x1068c <main>
    0x00010528 <_start+96>: nop
    0x0001052c <_start+100>:        call  0x207b4 <_PROCEDURE_LINKAGE_TABLE_+60>
    0x00010530 <_start+104>:        nop
    0x00010534 <_start+108>:        call  0x207c0 <_PROCEDURE_LINKAGE_TABLE_+72>
    0x00010538 <_start+112>:        nop
    0x0001053c <_start+116>:        retl
    0x00010540 <_start+120>:        add  %o7, %l7, %l7
    End of assembler dump.
    (on voit le call main dans la fonction _start)


    Et bien il se passe des choses derrière les coulisses!

    Merci millie pour cette information

  2. #22
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par archer Voir le message
    Le code qu’on vous a proposé marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include<stdio.h>
    void main ()
    {
    unsigned char c;
    //unsigned char c;
    printf("taper une touche");
    c=getchar();
    printf("le code ascii de %c est:%d",c,c);
    }
    je l’ai essayé sous Visual Studio Express 2005
    Pas du C standard...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:3: warning: function declaration isn't a prototype
    main.c:3: warning: return type of 'main' is not `int'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 2 warnings
    Le code de ultimate_manx est presque correct. Après mise au point :
    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
    25
    26
    27
    28
    29
    30
    31
     
    #include <stdio.h>
     
    static void purge (void)
    {
       int c;
       while ((c = getchar ()) != '\n' && c != EOF)
       {
       }
    }
     
    int main (void)
    {
       /* Declaration de ta variable c */
       int c;
     
       /* Recuperation et affichage du résultat */
       c = getchar ();
       /* nettoyage */
       if (c != '\n')
       {
          purge ();
       }
     
       printf ("Le code du caractere '%c' est: %d\n", c, c);
     
       /* pause */
       getchar ();
     
       return 0;
    }

  3. #23
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Voilà un code correct (programmé en 2minutes sous linux kubuntu par moi meme à 3H54 [je suis crevé] )
    J'aurais fait comme ça :
    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 (void)
    {
       char s[4];
       int codeASC = 0;
       fprintf (stdout, "Tapez une touche: ");
       fgets (s, sizeof s, stdin);
       /* Normalement on fait un fclean ici mais j'ai la flemme de re'ecrire la fonction */
       codeASC = *s;
       fprintf (stdout, "le code de '%c' est: %d\n\n", codeASC, codeASC);
       return 0;
    }

  4. #24
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Zartan Voir le message
    getchar() ne renvoie pas le prochain caractère entré, mais le prochain caractère dans le tampon de réception, certaines touches (comme par exemple les flèches) renvoient plus d'un caractère. Il fallait donc vider le tampon avant d'utiliser getchar().
    Euh, non. D'une manière générale, getchar() ne permet pas de récupérer le code d'une touche, mais uniquement la valeur du caractère associé. Ne pas confondre avec le getch() de CONIO.

  5. #25
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par archer Voir le message
    Salut
    On peut facilement remplacer void par int et mettre return 0; à la fin <...>
    c'est faisable en un rien de temps
    Oui, et c'est surtout une manière correcte d'écrire du code C portable (même sous VS2003, je te rassure).

    Je suis même certain que VS2003 en mode 'ANSI' exige aussi le int du main()...

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/12/2009, 23h18
  2. Probleme lors de la compilation d'un programme
    Par ToMs dans le forum wxWidgets
    Réponses: 4
    Dernier message: 15/06/2006, 18h50
  3. Bip lors de l'execution d'un programme
    Par Lolita59 dans le forum C
    Réponses: 6
    Dernier message: 04/05/2006, 15h49
  4. Problème lors de l'exécution d'un exe
    Par mbibim63 dans le forum JBuilder
    Réponses: 1
    Dernier message: 04/01/2006, 13h13
  5. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43

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