Bonjour (ou bonsoir),
J'essaie tant bien que mal de comprendre comment rendre une fonction privée.
Je sais qu'il n'y a pas de privé/public en C, et qu'il faut passer par la déclaration "static" d'une fonction pour limiter sa portée au fichier dans laquelle elle est exécutée.
Je me suis lancé dans la réalisation d'un programme qui imite le fonctionnement d'une application de messagerie (type Msn Messenger, ou SMS) en essayant de respecter le modèle MVC, le tout via des listes chainée (User -> contact -> msg)
Donc, je suis parti sur l'idée de considérer mon main comme un prg externe qui fait appel a une sorte d'API que mon controller fourni au main pour exécuter certaines fonctions de base : ajout, effacer, sélectionner, afficher (des user, contact ou msg).
J'ai bien compris comment déclarer une fonction static dans mon fichier "controller.c" et comment y faire appel depuis mon main.c
Je déclare et définis d'abord une fonction en static dans le controller.c, ensuite je définis une fonction "normal" dans le controller (que je déclare dans controller.h que j'inclus dans le main) qui fait appel a la fonction static définis précédemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // main.c #include "controller.h" foo();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // controller.h int foo(void);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // controller.c static fooStatic(); { ... } foo() { fooStatic(); }
Jusque la tout va bien, mais comment je fais si je veux que la fonction fooStatic() soit dans déclarée et définie dans un autre fichier que le controller.c, par exemple dans model.c ou vue.c??
Lors de mes test, ça ne fonctionne pas.. ou alors je dois passer à nouveau par une couche supplémentaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // main.c #include "controller.h" foo();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // controller.h int foo(void);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // controller.c #include "modele.h" foo() { fooModele(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // modele.h fooModele(void);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // modele.c staticFooModele(void) { ... } fooModele() { staticFooModele(); }
Est ce que j'ai bon?? Est ce que c'est la seule manière de faire?? Est ce que ça n'est pas trop tortueux??
En fait, ce dont je veux être sûr, c'est de respecter le modèle MVC au plus près en respectant la séparation des différents module du MVC et la notion "privée" des fonctions qui seront appelée par chacun de ces modules. (??)
Partager