Algún programador piensa que definir una función dentro de otra función se conoce como “función anidada”. Pero la realidad es que no es una función anidada, se trata como alcance léxico. El alcance léxico no es válido en C porque el compilador no puede alcanzar/encontrar la ubicación de memoria correcta de la función interna.
La función anidada no es compatible con C porque no podemos definir una función dentro de otra función en C. Podemos declarar una función dentro de una función, pero no es una función anidada.
Debido a que las definiciones de funciones anidadas no pueden acceder a las variables locales de los bloques circundantes, solo pueden acceder a las variables globales del módulo contenedor. Esto se hace para que la búsqueda de variables globales no tenga que pasar por el directorio. Como en C, hay dos ámbitos anidados: local y global (y más allá de esto, integrados). Por lo tanto, las funciones anidadas solo tienen un uso limitado. Si intentamos acercarnos a la función anidada en C, obtendremos un error de tiempo de compilación.
// C program to illustrate the // concept of Nested function. #include <stdio.h> int main(void) { printf("Main"); int fun() { printf("fun"); // defining view() function inside fun() function. int view() { printf("view"); } return 1; } view(); }
Producción:
Compile time error: undefined reference to `view'
Una extensión del GNU C Compiler permite las declaraciones de funciones anidadas. Las declaraciones de funciones anidadas bajo la extensión de GCC deben tener el prefijo/comienzo con la palabra clave auto .
// C program of nested function // with the help of gcc extension #include <stdio.h> int main(void) { auto int view(); // declare function with auto keyword view(); // calling function printf("Main\n"); int view() { printf("View\n"); return 1; } printf("GEEKS"); return 0; }
Producción:
view Main GEEKS
Este artículo es una contribución de Bishal Kumar Dubey . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA