Maison > développement back-end > C++ > En langage C, fonctions imbriquées

En langage C, fonctions imbriquées

WBOY
Libérer: 2023-09-06 13:57:06
avant
1237 Les gens l'ont consulté

En langage C, fonctions imbriquées

Dans certaines applications, on constate que certaines fonctions sont déclarées à l'intérieur d'une autre fonction. C'est ce qu'on appelle parfois une fonction imbriquée, mais ce n'est pas réellement une fonction imbriquée. C’est ce qu’on appelle la portée lexicale. En C, la portée lexicale n’a aucun effet car le compilateur ne peut pas trouver l’emplacement mémoire correct de la fonction interne.

Les définitions de fonctions imbriquées ne peuvent pas accéder aux variables locales des blocs environnants. Ils ne peuvent accéder qu'aux variables globales. En C, il existe deux portées imbriquées : locale et globale. Par conséquent, les fonctions imbriquées ont des utilisations limitées. Si nous voulons créer une fonction imbriquée comme ci-dessous, une erreur sera générée.

Exemple

#include <stdio.h>
main(void) {
   printf("Main Function");
   int my_fun() {
      printf("my_fun function");
      // defining another function inside the first function.
      int my_fun2() {
         printf("my_fun2 is inner function");
      }
   }
   my_fun2();
}
Copier après la connexion

Sortie

text.c:(.text+0x1a): undefined reference to `my_fun2&#39;
Copier après la connexion

Mais une extension du compilateur GNU C permet de déclarer des fonctions imbriquées. Pour ce faire, il faut ajouter le mot-clé auto avant la déclaration de la fonction imbriquée.

Exemple

#include <stdio.h>
main(void) {
   auto int my_fun();
   my_fun();
   printf("Main Function</p><p>");
   int my_fun() {
      printf("my_fun function</p><p>");
   }
   printf("Done");
}
Copier après la connexion

Sortie

my_fun function
Main Function
Done
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal