# XCode et les fonctions imbriqués



## kilik2049 (3 Décembre 2009)

Salut à tous, je suis en train de coder en C, et à chaque fois que je veux utiliser un algo de tri, Xcode m'affiche un message d'erreur comme quoi les fonctions imbriqués sont désactivées et que je dois utiliser une commande pour les réactiver. Sauf que je ne vois pas où et comment l'utiliser...
Si quelqu'un pouvait éclairer ma lanterne, ça serait sympa 
Merci d'avance.


----------



## Céroce (3 Décembre 2009)

Une fonction imbriquée, c'est ça:


```
void fonction1(void)
{
	void fonction2(void)
	{
		print("toto");	
	}		
}
```

Effectivement, ce n'est pas accepté par défaut, donc il faudrait dire au compilateur d'autoriser leur utilisation en lui passant le flag (sur la ligne de commande, ou avec XCode, dans les options de l'exécutable, dans l'onglet Arguments). 

Ceci dit le compilateur gcc sort souvent des messages d'erreur complètement à côté de la plaque. Il est beaucoup plus probable que tu aies oublié un point-virgule quelque part.


----------



## ntx (3 Décembre 2009)

Ou une accolade mal fermée.


----------



## kilik2049 (4 Décembre 2009)

Nan, je suis sur du code, c'est bien deux void imbriqués. J'ai XCode en anglais, les options de l'executables, c'est les options de run? Parce que je ne vois pas d'option pour run.
Sinon, si c'est les préférences d'XCode, quels onglets est-ce après?
Merci de votre aide


----------



## ntx (4 Décembre 2009)

Dans ton projet : Targets/<ta cible>/Get Info/Build, je suppose que c'est dans la rubrique "GCC 4.2 - Language" mais je n'ai rien vu qui y ressemble. Dans ce cas, "man gcc" dans le terminal pour trouver le bon flag et le mettre dans la ligne "Other C flags" ou "Other C++ flags".


----------



## Céroce (4 Décembre 2009)

ntx donne la bonne méthode. Je me suis trompé dans ma réponse, ce n'est pas un argument passé à l'application, mais bien un argument passé au compilateur.

Il me semble que le message d'erreur dit justement quel flag il faut passer au compilateur.


----------



## kilik2049 (10 Décembre 2009)

Merci  Ça marche maintenant, mais faut le faire à chaque fois, c'est un peu chi***


----------



## ntx (10 Décembre 2009)

Tu as trouvé le flag qui va bien ?

Si tu veux persévérer dans cette façon de faire, tu peux essayer de te faire un template de projet avec ce paramètre, mais il faut quand même considérer que ce n'est pas dans les habitudes des développeurs d'utiliser les fonctions imbriquées. Donc essaie plutôt de t'en passer. :rateau:


----------



## kilik2049 (13 Décembre 2009)

Oui le flag est celui donné par Xcode.
Mais bon, parfois je fais des fonctions imbriqués sans m'en rendre compte :rateau:


----------



## tatouille (15 Décembre 2009)

on utilise pas de nested en C, c'est plus admis depuis 10 ans, c'est unsafe crade et merdique

nested function are a horrible gcc misfeature.  So far people had enough taste to not introduce them without explicitly forbidding it


----------

