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 :

fonction et procédure avec aucun paramètre en entrée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Par défaut fonction et procédure avec aucun paramètre en entrée
    Bonsoir;
    je voudrais savoir si c'est possible d'écrire une fonction ou bien une procédure(void) en langage c qui ne contiennent aucun paramètres en entrée

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Oui.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int function_qui_ne_retourne_rien(void)
    {
      return 47;
    }
    On peut bien sur remonter plein d'autres choses qu'un int...
    Un pointeur, une structure...

    Bonne soirée

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    Pour le fun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void) {
        printf("Hello world");
     
        return(0);
    }

  4. #4
    Membre actif
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Par défaut
    merci pour vos réponses,
    par exemple si j'avais une procédure qui calcule la moyenne, mais avant de calculer la moyenne j'ai d'autres calcules, comme la lecture du fichier csv, ensuite le calcule de la distance euclidienne du fichier csv qui donne une matrice , et enfin le calcule de la moyenne de la distance euclidienne

    le tout regroupé dans une procédure de la façon 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
    void moyenne()
    {
    .....
     
     
    printf("moy=%g",moy);
    return;
     
    }
     
    int main(int argc, char *argv[])
    {
         moyenne;    
      system("PAUSE");	
      return 0;
    }
    }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Un bon code découpe normalement les opérations dans des fonctions spécialisées pour 1 actions.
    Ça permet entre autre de les réutiliser.
    Mais rien n'empêche de faire une super fonction qui regroupe tout..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Octobre 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2019
    Messages : 21
    Par défaut
    D'ailleurs fais attention aux parenthèses vides. Alors que foo() exprime un nombre d'arguments arbitraire, foo(void) signifie qu'aucun argument ne peut être passé. Cette nuance ne reste dans le langage que pour des raisons de compatibilité avec des versions anciennes du C. C++ l'a abandonné et foo() a le même effet que foo(void).

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par lynaranya Voir le message
    merci pour vos réponses,
    par exemple si j'avais une procédure qui calcule la moyenne, mais avant de calculer la moyenne j'ai d'autres calcules, comme la lecture du fichier csv, ensuite le calcule de la distance euclidienne du fichier csv qui donne une matrice , et enfin le calcule de la moyenne de la distance euclidienne

    le tout regroupé dans une procédure de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void moyenne()
    {
    .....
     
     
    printf("moy=%g",moy);
    return;
     
    }
    Ben sans parler de ton return final totalement inutile pour une fonction ne retournant rien, les paramètres d'une fonction servent justement à la rendre universelle. Grace aux paramètres justement elle pourra faire ses calculs de la même façon quelle que soit la valeur reçue. C'est le pendant informatique de la notation mathématique f(x)=... permettant d'exprimer un calcul sans avoir à se préoccuper de la valeur à calculer qui sera donnée plus tard.
    Une fonction sans paramètre reste donc très limitée (cf premier exemple de Bayard qui crée une fonction retournant en tout et pour tout le nombre 47 et tant pis si l'utilisateur a besoin de 48).
    Pour ta moyenne par exemple je ne vois pas trop comment elle pourra calculer la moyenne des éléments sans les connaitre. Ou alors tu envisages de passer par des variables globales ce qui est la pire des mauvaises idées de conception...

    Citation Envoyé par Corluk Voir le message
    Alors que foo() exprime un nombre d'arguments arbitraire
    Non. C'est la notation foo(...) qui exprime des arguments arbitraires. foo() exprime bien une fonction sans argument.

    Citation Envoyé par Corluk Voir le message
    C++ l'a abandonné et interdit foo(void).
    Ah bon ? Je suis pas un pro du C++ mais il me semble avoir vu quand-même foo(void). Il me semble même que justement c'est la seule syntaxe autorisée en C++...
    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]

  8. #8
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Octobre 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2019
    Messages : 21
    Par défaut
    Mettre void n'a aucun effet en C++ mais la syntaxe n'est pas du tout interdite.
    C'est bien, je me suis mal souvenu, foo() et foo(void) sont équivalents en C++. Mais la difference, c'est ce qui a été abandonné. Je l'ai corrigé dans mon dernier post.

    Je me suis renseigné un peu plus. Pour clarifier, référons au standard même. L'ébauche N1570 du standard C11 contient le nécessaire.

    §6.7.6.3/14:

    The empty list in a function declarator that is not part of a
    definition of that function specifies that no information about the number or types of the
    parameters is supplied. 145)
    C'est-à-dire, une déclaration avec des paramètres vides exprime que le programmeur ne fournit aucune information sur les paramètres. Donc, du code comme le suivant est tout à fait possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void foo();
    void foo(int a) { }
    La citation dessus est précédée par cette phrase-ci :

    An empty list in a function declarator that is part of a definition of that function specifies that the
    function has no parameters.
    Donc, en principe, Sve@r est correct en disant que des parenthèses vides expriment qu'il n'y a pas d'arguments. Mais fais très attention, parce qu'il y a encore §6.5.2.2/6 :

    If the expression that denotes the called function has a type that does not include a
    prototype [...] If the number of arguments does not equal the number of parameters, the
    behavior is undefined.
    Si l'on appelait une fonction qui manque un prototype et le nombre d'arguments n'est pas le nombre de paramètres, alors on obtiendrait du comportement indéfini, ce dont un compilateur peut ou ne peut pas avertir ! Le suivant cause du comportement indéfini et mon compilateur de choix, gcc, n'en avertit pas, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void foo() { }
    int main(void) { foo(1); }
    En bref :
    Une déclaration comme void foo(); sert à exprimer que le nombre de paramètres est inconnu.
    Une définition comme void foo() { } sert à exprimer que le nombre de paramètres est zéro.
    foo(void) effectue la même chose au niveau du compilateur : Non seulement du comportement indéfini, mais une erreur.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/12/2009, 16h03
  2. [2005] Créer une procédure avec pour paramètre une table
    Par Sergejack dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/10/2009, 14h22
  3. Lancer une procédure avec un paramètre (débutant)
    Par Daniel MOREAU dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 27/10/2006, 15h48
  4. Fonction ou procédure avec paramètres optionnels ?
    Par [Silk] dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2006, 13h55
  5. [VBA-A]procédure avec comme paramètre une propriété
    Par eultartuffe dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/04/2006, 13h49

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