Fonction ne retournant rien, mais l'affichage marche...

Voir le sujet précédent Voir le sujet suivant Aller en bas

Fonction ne retournant rien, mais l'affichage marche...

Message  Jaloyan1 le Ven 12 Juin 2009 - 23:13

Bonjour, sur un forum, j'ai découvert un problème assez étrange, je dispose de cette fonction (qui compile avec des warnings), et qui n'est censé rien renvoyer, il retourne pourtant la bonne réponse par miracle, bien sur j'ai changé ma chaine de caractère et il m'affiche le bon résultat quelle que soit la chaine de caractère, d'où pourrait venir ce miracle?
Code:
#include <stdio.h>
#include <stdlib.h>

long longueur(const char chaine[]);

int main(void)
{
    char chaine[] = "Bonjour";
    printf(chaine);
    printf("\nLongueur de la chaine:%ld\n",longueur(chaine));
    return 0;
}



long longueur(const char chaine[])
{
    long taille = 0;
    while(chaine[taille] != '\0')
    {
        taille++;
    }
}

merci d'avance pour vos réponses.

Jaloyan1

Messages : 6
Date d'inscription : 30/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Fonction ne retournant rien, mais l'affichage marche...

Message  -ed- le Sam 13 Juin 2009 - 9:13

Jaloyan1 a écrit:Bonjour, sur un forum, j'ai découvert un problème assez étrange, je dispose de cette fonction (qui compile avec des warnings), et qui n'est censé rien renvoyer, il retourne pourtant la bonne réponse par miracle, bien sur j'ai changé ma chaine de caractère et il m'affiche le bon résultat quelle que soit la chaine de caractère, d'où pourrait venir ce miracle?
Comme l'indique un compilateur bien réglé :
Code:

-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c: In function `longueur':
C:\dev\hello\main.c:23: warning: control reaches end of non-void function
Output size is 18.57 KB
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 1 warnings
Le comportement est indéfini. En effet, il n'y a pas de return. La valeur retournée est donc indéfinie

Chez moi, le résultat est :
Code:

Bonjour
Longueur de la chaine:7

Process returned 0 (0x0)  execution time : 0.114 s
Press any key to continue.
Mais c'est un hasard dû à l'utilisation particulière de certains registres en interne (AX, EAX ...). Dans d'autres circonstances (autre compilateur, autres réglages, autre machine), le résultat pourrait être totalement différent.

Je rappelle que pour un code soit correct, il faut d'abord et avant tout qu'il soit débarrassé de tout comportement indéterminé. Ce n'est qu'après que l'on peut juger de la pertinence de son comportement.

Ce code est donc faux et doit être corrigé.


Dernière édition par -ed- le Sam 13 Juin 2009 - 10:24, édité 2 fois (Raison : complément)

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: Fonction ne retournant rien, mais l'affichage marche...

Message  Jaloyan1 le Sam 13 Juin 2009 - 9:54

d'accord merci beaucoup de ta réponse.

Jaloyan1

Messages : 6
Date d'inscription : 30/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Fonction ne retournant rien, mais l'affichage marche...

Message  Contenu sponsorisé Aujourd'hui à 15:29


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum