CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c++] Déclaration de fonction

le_duche
le_duche
Niveau 10
23 août 2005 à 18:00:43

Quand je définit une fonction
void f(void)
par exemple, qui a besoin d´une autre qui n´est utilisée que par elle
int g(int a, int b)
par exemple
(ce qui arrive souvent quand la fonction g est récursive et que f ne peut pas l´etre)

est ce que je peux déclarer et définir mes fonctions comme ceci:

void f(void)
{

int g(int a,int b)
{
// définition de g
}

// définition de f

}

de façon à ce que g ne soit utilisable que par f

Si c´est possible, est-ce que c´est mieux, ou bien est ce que je dois juste faire ma déclaration de g dans f et définir g plus loin ou bien encore déclarer et définir g en dehors de tout...

Bigloo
Bigloo
Niveau 10
23 août 2005 à 18:34:41

J´ai fait un test en appelant g() avant de le définir dans f() (qui était appelé par main() ), il faut juste mettre le prototype (si c´est bien comme ça que ça s´appelle :p ) dans f apparemment.

OxFFFF
OxFFFF
Niveau 8
23 août 2005 à 18:35:25

Tout a fait : le protoype seulement, et ta fonction définie après dans le fichier.

dnob700
dnob700
Niveau 10
23 août 2005 à 18:37:35

le_duche : non, en C et en C++ il est absolument interdit d´imbriquer les fonctions. On peut se dire que c´est dommage, mais c´est comme ça, ça ne peut pas se faire.

Tu dois donc déclarer et définir g en dehors de f ou de toutes autres fonctions.

Bigloo
Bigloo
Niveau 10
23 août 2005 à 18:39:32

Et pourtant elle tourne
Chapter24:~ dashuhn$ foo.exe
foo

(Certains diront que j´utilise trop de "foo" dans mes noms de fichiers/tests )

OxFFFF
OxFFFF
Niveau 8
23 août 2005 à 18:43:10

On ne peut pas imbriquer de fonctions, mais on peut déclarer des protoypes au sein d´autres fonctions d´après la norme.

dnob700
dnob700
Niveau 10
23 août 2005 à 18:44:15

ah ok, je savais pas.

Bigloo
Bigloo
Niveau 10
23 août 2005 à 18:48:01

Mais à quoi ça servirait de toute façon ?

OxFFFF
OxFFFF
Niveau 8
23 août 2005 à 18:52:15

A avoir des fonctions ne pouvant être utilisées que par certaines parties du programme : ca permet de fractionner la tâche effectuée par une fonction en déléguant le boulot à d´autres, tout en évitant à l´utilisateur de la librairie d´accéder à ces fonctions utilitaires (pour des questions de contrôle nécessaires de argument, ou de sécurité par exemple)

Bigloo
Bigloo
Niveau 10
23 août 2005 à 18:54:53

Ah oui d´accord.

Ca existe aussi en Python mais comme la définition de la fonction imbriquée se fait à l´execution de la fonction qui la contient, pour des raisons de mémoire (puisqu´on oublie l´imbriquée une fois la contenante terminée). Seulement je voyais pas l´interêt en C.

Mais c´est vrai que main() ne peut pas accèder à g() chez moi sans passer par f(). Merci :)

le_duche
le_duche
Niveau 10
25 août 2005 à 20:52:22

^j´ai encore quelque habitudes du pascal... et ca on pouvait faire ^^

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment