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 :

aucun affichage avec fonction retournant valeurs


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 355
    Points : 0
    Points
    0
    Par défaut aucun affichage avec fonction retournant valeurs
    bonjour,

    je débute en C et j'ai écris un programme basique qui est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(void)
    {
        int i;
        int b=0;
        for(i=0;i<50;i++) {
            return b;
        }
    }
    une fois compilé et executé,ce programme n'affiche rien car il n'y a aucun printf.

    D'où ma question:
    quel est l'intérêt des fonctions retournant des valeurs alors que ces dernières ne s'affichent pas à l'execution?

    merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Deja ta boucle est un peu absurde,vu que tu met un return donc ta boucle ne se fera pas.
    Le second est que le return dans le main sert principalement a savoir si le programme a bien fonctionné ou pas.

    L’intérêt tu prend la fonction cos , elle te retourne la valeur de cos :p
    Elle peut servir a renvoyer un pointeur (genre malloc).
    Elle peut indiquer une comparaison (genre strcmp ).
    Ou que la fonction indique si cela s'est bien passé.

    Bref des exemples il y'en a des millions.
    Mais le mieux est que tu code en C plus souvent avec d'autre librairie tu verra les nombreuses utilisations des fonctions , le but est de suivre un certain paradigme qui est principalement d'éviter les effets de bord , et que la fonction retourne une valeur est parfaite pour cela.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Aujourd'hui, tu débutes et la seule interaction que tu as avec ton programme est de lui demander d'afficher quelque chose pour que tu puisses voir ce qu'il fait. Pourtant, un programme informatique n'est pas forcément un programme qui affiche quelque chose. Le calculateur d'injection de ta voiture par exemple, qui a une grande chance d'être écrit en C, n'affiche rien. Pourtant, il travaille et il utilise sans doute des dizaines de fonctions qui renvoient une valeur. L'affichage n'est pas une fin en soi.

  4. #4
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour
    Citation Envoyé par tabkelm Voir le message
    bonjour,

    je débute en C et j'ai écris un programme basique qui est le suivant:

    une fois compilé et executé,ce programme n'affiche rien car il n'y a aucun printf.

    D'où ma question:
    quel est l'intérêt des fonctions retournant des valeurs alors que ces dernières ne s'affichent pas à l'execution?

    merci de votre aide

    Pour répondre à votre question, je dirais juste ceci :
    Les fonctions qui renvoient un résultat ("renvoient une valeur") sans afficher quelconque informations sont des fonctions qui rendent un service bien déterminé (C’est-à-dire quelque chose comme retourner le résultat d’une addition, multiplication, le résultat du calcul d’un angle de déphasage, un booléen pour l’état d’un capteur, etc. ) qui va être utilisée pour autre chose voire parfois changer l’état du programme ou de son environnement d’exécution et renvoyer également une valeur; contrairement à une fonction qui ne renvoie aucune valeur, mais utilisée pour modifier l’état du programme, c'est-à-dire "comme exemple" changer le contenue de la mémoire allouée à une variable.

    Autre exemple plus parlant, lorsque, la fonction main se termine un code de retour est utilisé pour permet au programme de faire savoir au système d’exploitation l’état auquel, c’est terminer le programme. Ce code retour défini donc si une erreur a été détectée ou pas. Par convention la fonction main() doit retourner 0 (ou la constante EXIT_SUCCESS, définie dans stdlib.h qui vaut 0) si tout s’est bien passé et cas contraire un nombre non-nul en cas d’erreur (ou EXIT_FAILURE) pour permettre au système d’exploitation de savoir quel est le type d’erreur et prendre les mesures nécessaires.
    Si vous retourner une valeur différente de zéro dans votre programme le système d’exploitation comprendra que le programme a terminer avec une erreurs exemple:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main( void ){
     
        short i = 0;
        for( i = 0; i< 50; i++ )
           ;
        return EXIT_FAILURE;        //sortie avec erreur
    }

    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Pour faire suite au message de sambia39, voici comment interfacer son exemple de programme C avec le shell Unix/Linux qui le met en oeuvre.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    #include <stdlib.h>
     
    int main( void ){
     
        short i = 0;
        for( i = 0; i< 50; i++ )
           ;
        return 18;        //sortie avec erreur puisque toute valeur différente de 0 est conventionnellement considérée comme représentant une erreur
    }

    Si par exemple tu nommes ce programme "essai.c" et que tu le compiles vers l'exécutable "essai" (style gcc essai.c -o essai), voici comment tu peux ensuite l'utiliser depuis un shell Unix/Linux (sous réserve que tu travailles depuis cet OS)
    $ ./essai; echo $?.

    Typiquement, le shell va d'abord exécuter le programme puis ira ensuite récupérer son code retour (ici "18") et stocker ce code retour dans la variable "$?" (correspondant à l'état du dernier programme exécuté). C'est automatique.
    Mais en demandant explicitement ensuite au shell d'afficher cette variable (echo $?) tu retrouves cette valeur à l'écran.
    C'est une façon de faire communiquer un programme avec son environnement. Ici ce n'est pas le programme qui affiche quoi que ce soit mais l'environnement qui l'a exécuté. Mais ne rien afficher n'empêche pas un programme de fonctionner et faire un travail (par exemple le programme Unix/Linux "cp" copie un fichierX dans un fichierY (ou plusieurs fichiers X Y Z dans un dossier D) et tout ça sans afficher quoi que ce soit). Ceci dit, si un programme dure plus de 15 secondes, c'est effectivement plus rassurant de le voir afficher des trucs intermédiaires pendant qu'il bosse...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [XL-2003] ma fonction retourne #VALEUR! lors de la suppression d'une ligne
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/12/2009, 18h17
  2. Réponses: 2
    Dernier message: 11/06/2009, 23h48
  3. aucun affichage avec le cout mais pas d'erreur
    Par skerdreux dans le forum C++
    Réponses: 2
    Dernier message: 15/04/2008, 14h38
  4. [VC2005] Aucun affichage avec DebugView
    Par Philippe320 dans le forum MFC
    Réponses: 4
    Dernier message: 17/01/2008, 14h17
  5. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01

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