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 :

Comment faire une fonction - procédure


Sujet :

C

  1. #1
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 712
    Billets dans le blog
    7
    Par défaut Comment faire une fonction - procédure
    Vous avez sans doute remarqué que [] agit comme un fonction et parfois comme un procédure dépendant qui soit à gauche du = ou à droite du =.

    y = mon_tableau[22] # une fonction
    mon_tableau[22] = y # une procedure

    Comment fait-on pour faire une fonction qui à le même nom qu'une procédure ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut
    il te faut créer une classe avec propriétés et méthodes

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Madmac
    Vous avez sans doute remarqué que [] agit comme un fonction et parfois comme un procédure dépendant qui soit à gauche du = ou à droite du =.
    Hein ? Tu es en quel langage, la ? C'est quoi une procedure ?

    Citation Envoyé par chental
    il te faut créer une classe avec propriétés et méthodes
    C'est du C++ - on est dans le forum C (encore que je commence a me poser des questions !)

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Madmac
    y = mon_tableau[22] # une fonction
    mon_tableau[22] = y # une procedure
    Ce n'est pas un comportement de fonctions, ce ne sont que de simples affectations et rien de plus ! Je tiens à signaler par ailleurs que le Langage C est un langage à fonctions, les procédures lui il ne sait pas ce que c'est car ca n'existe pas en C !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par chental
    il te faut créer une classe avec propriétés et méthodes
    Faut arréter de fumer la moquette... Les acariens grillés, ça pète le cerveau !

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Faut arréter de fumer la moquette... Les acariens grillés, ça pète le cerveau !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Un tableau, ce n'est rien de plus qu'un espace mémoire indexé. Un tableau ne retourne pas de valeur, et n'effectue aucune tâche.

    Ici, tu affecte à la variable y la valeur contenue à l'adresse mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_tableau + 22*type(mon_tableau[0])
    L'instruction:
    réalise l'opération inverse.
    Je tiens à signaler par ailleurs que le Langage C est un langage à fonctions, les procédures lui il ne sait pas ce que c'est car ca n'existe pas en C !
    Certes, mais une fonction qui retourne void n'est finalement rien d'autre qu'une procédure.

    A+

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mujigka
    Certes, mais une fonction qui retourne void n'est finalement rien d'autre qu'une procédure.
    En informatique générale, peut être. Ce terme n'existe pas en langage C.

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Soit! Toujours est-il que certains programmeurs C utilisent ce terme dans ce contexte.

    A+

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 712
    Billets dans le blog
    7
    Par défaut
    Apparemment la sémantique a son importance, néanmoin personne n'a pus m'apporté la solution . Je dois reconnaitre que j'aurais dû précisé que je parlais de fonction qui ne traitait que des pointeurs ou des structures ...

    Est-ce qu'il est possible de faire deux fonction qui porter le même nom et qui feront en sorte que l'on puisse utilisé le même terme de chaque coté d'un =

  11. #11
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par Madmac
    Apparemment la sémantique a son importance, néanmoin personne n'a pus m'apporté la solution . Je dois reconnaitre que j'aurais dû précisé que je parlais de fonction qui ne traitait que des pointeurs ou des structures ...

    Est-ce qu'il est possible de faire deux fonction qui porter le même nom et qui feront en sorte que l'on puisse utilisé le même terme de chaque coté d'un =
    Impossible en C, faisable en C++...

    Tu exposes ici deux notions :
    - la première c'est celle de surcharge de fonction (polymorphisme de méthode dans le vocabulaire des savants de la programmation orientée objet) : cela consiste à avoir des fonctions différentes qui n'ont de commun que le nom.
    - la seconde, c'est la possibilité d'utiliser une fonction comme valeur-gauche (left-value ou lvalue) d'une expression d'affectation. En C++, ce n'est pas la fonction proprement dite qui recevra la valeur mais l'objet que la fonction retourne. C++ utilise le mécanisme des références pour ce faire.

    Ces 2 concepts sont disponibles en C++ mais pas en C.

    Programme hors-sujet :

    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 <iostream>
     
    struct Foo
    {
       Foo() {}
       virtual ~Foo() {}
     
       void Bar(const int n) { bar = n; }
       int & Bar () { return bar; } 
     
    private:
       int bar;
    };
     
     
    int main()
    {
      Foo foo;
      int a = 2, b = 0;
     
      std::cout << "a : " << a << "\n";
      std::cout << "b : " << b << "\n";
     
      foo.Bar() = a;
      b = foo.Bar();
     
      std::cout << "a : " << a << "\n";
      std::cout << "b : " << b << "\n";
     
      return 0;
    }
    A+

  12. #12
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 712
    Billets dans le blog
    7
    Par défaut
    Merci foobar !

    J'espérait qu'au niveau des structures le polyformisme était possible ...

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Enfin, tu peux toujours jouer avec des pointeurs de fonction en C, mais ça devient compliqué quand on se met à toucher aux vtables multiples (héritage multiple ou héritage simple+interfaces).

    Un truc qui a déjà été fait par contre, c'est utiliser des "interfaces" C++ (des classes avec juste des fonctions virtuelles, quoi) en C : C'est ce que permet COM/OLE de Microsoft.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    ça y ai je vient de comprendre (merci à Foobar1329 pour l'exemple en C++)

    ça doit pouvroir ce faire mais c'est du bidouillage qui risque d'être très dur à maintenir (surtout pour le nouveau chef de projet )

    L'idée est d'avoir une fonction de la forme :
    Si n = -1 elle retourne bar (variable static) sinon elle modifie bar (et retourne NULL)

    Après le résultat d'une fonction peut être utilisée comme left-value :
    Bon faut rajouter l'opérateur de déréférecement

    Après le problème c'est si tu veux quelque chose de cette forme là :
    Faut passer par des macro à nombre variable d'arguments, connaitre le nombre d'arguments passé (c'est suretout à ce niveau que c'est tordu) et remplacer
    Voir
    par
    Si aucun paramètre n'est passé

  15. #15
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Sans vouloir faire le rabat joie, je ne comprend pas bien l'interet de ce que tu cherches à faire ?

    Ou est-ce simplement pour faire "beau intelectuellement" ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2008, 15h56
  2. [VBA-E] Comment faire une fonction utilsant une autre feuille
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 16h27
  3. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  4. [C#][Débutant] Comment faire une fonction FindWindow ?
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/04/2006, 13h19
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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