Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
TCL C74 Series 55C743 – TV 55” 4K QLED 144 Hz Google TV (Via ODR ...
499 €
Voir le deal

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

2 participants

Aller en bas

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

Message  Jaloyan1 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
Jaloyan1

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

Revenir en haut Aller en bas

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

Message  -ed- 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)
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

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

Message  Jaloyan1 Sam 13 Juin 2009 - 9:54

d'accord merci beaucoup de ta réponse.
Jaloyan1
Jaloyan1

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

Revenir en haut Aller en bas

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

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser