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.
#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(); }
text.c:(.text+0x1a): undefined reference to `my_fun2'
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.
#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"); }
my_fun function Main Function Done
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!