Définition de fonction dans une autre définition de fonction: est-elle valide?

voir ce code

#include int main() { void test(void) { printf("test"); return; } printf("main"); return 0; } 

cette étudiante fonctionne bien et ne donne aucun avertissement et erreur. Je ne comprends pas pourquoi cela se produit? Ici, j’ai écrit une définition de fonction dans une autre définition de fonction, est-elle valide?

EDIT: si oui, y a-t-il une utilisation de cela?

Pourquoi gcc a besoin d’append cette fonctionnalité en tant qu’extension .. il ne devrait pas y avoir d’utilisation de ce n’est pas ça?!

L’imbrication des définitions de fonctions repose sur une extension GCC. Ce n’est pas décrit par la norme.

Si vous souhaitez que votre code fonctionne avec d’autres compilateurs, évitez d’utiliser de telles techniques. De plus, si vous collaborez avec d’autres développeurs, je prédis que beaucoup d’entre eux n’apprécieront pas l’utilisation de telles constructions non standard.

Je ne suis pas un expert de GCC, mais je suis presque sûr qu’il existe des options de compilation pour désactiver les extensions. Cela vous permettra d’obtenir que le compilateur s’assure que vous n’écrivez pas de code qui ne sera pas compilé avec d’autres compilateurs.


En ce qui concerne votre mise à jour, il existe des utilisations pour les fonctions nestedes. Ils peuvent aider à l’encapsulation en limitant la scope et la visibilité. Cependant, il n’y a pas de problème qui ne puisse pas être résolu de manière parfaitement adéquate sans les fonctions nestedes, ce qui explique, je pense, pourquoi elles sont une particularité rarement utilisée de GCC.

La définition d’une fonction nestede (c’est-à-dire dans une autre fonction) est valide, la seule limite étant que la scope de la fonction précédente est limitée par la fonction englobante. C’est comme définir une variable locale. Vous pouvez trouver plus d’informations ici: http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

La réponse de Joachim à propos des fonctions nestedes en tant qu’extension GCC est correcte; vous avez également demandé s’il était utilisé: j’ai vu le code source de centaines de projets et je n’ai encore jamais vu quelqu’un utiliser cette extension GCC.

Oui, nous pouvons définir une fonction dans une autre fonction. J’ai compilé ci-dessous des lignes écrites dans gcc et cela a fonctionné avec succès sans montrer d’erreur.

 #include; void main() { int sum() { int a=30, b=10, c=20, sum=0; sum=a+b+c; return sum; } int a; a=sum(); printf("Sum = %d", a); } 

O / p: 60

Je sais que GCC a ceci comme extension. À ma connaissance, cela ne fait pas partie de la norme.