Local function definitions are illegal

Résolu/Fermé
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013 - 15 avril 2013 à 16:04
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013 - 20 avril 2013 à 18:34
Bonjour,

J'essaie d'écrire une petite fonction pour afficher le contenu d'un registre et pour cela j'ai écrit ce code :


#include <stdio.h>
#include <stdlib.h>

void main()
{
  int ShowReg() // Déclarer la fonction ShowReg
  {
	  int registre = 0;
    scanf("%d", &registre);
	  printf("Contenu du registre %d", registre);
      
    return registre;
  }
}


Au moment de la compilation, j'ai eu cette erreur :
Exercice1.cpp(7) : error C2601: 'ShowReg' : local function definitions are illegal

Quelqu'un pourrait m'expliquer comment la corriger ?
Merci d'avance !
A voir également:

1 réponse

Utilisateur anonyme
15 avril 2013 à 16:12
Bonjour

Comme l'indique le message, tu essayes de déclarer une fonction (ShowReg) à l'intérieur d'une autre (main).
C'est interdit en C.
Il suffit de la déclarer à l'extérieur de main, c'est aussi simple que ça.
0
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013
15 avril 2013 à 16:15
Merci beaucoup pour la réponse !
J'ai déclaré la fonction à l'extérieur comme indiqué.
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
15 avril 2013 à 16:24
Salut BV91,

Outre l'excellent réponse de le père, voilà d'autre commentaires utiles :

- main devrait être déclarée "int main()" et retourner 0 en fin d'exécution avec un "return 0;" avant ta dernière accolade, indiquant à l'environnement que ton programme s'est terminé sans erreurs

- ton erreur indique que ton fichier s'appelle "Exercice1.cpp" - si tu codes en C, il faut que ton projet soit compilé par un compilateur C, et non un compilateur C++

- tu ne fais pas de contrôle d'erreur sur le résultat de scanf, mais je suppose que tu sais cela


Dal
0
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013
Modifié par BV91 le 15/04/2013 à 16:32
J'ai corrigé la déclaration de la fonction "main", merci !

Pour la compilation, j'ai remplacé le nom du projet "Exercice.cpp" par "Exercice.c". Est-ce suffisant ?

Quant à scanf, j'ai écrit une autre fonction qui contrôle la saisie de l'utilisateur et vérifie que les valeurs entrées sont bien des chiffres (en utilisant "isdigit").

P.S. J'utilise Visual C++ 6.0 comme IDE.
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
15 avril 2013 à 17:03
Je n'utilise pas Visual Studio, mais tu trouveras des indications là :

https://stackoverflow.com/questions/3327199/how-can-i-use-visual-studio-2010-for-c-development

Pour scanf, ma compréhension est que tu simules l'obtention d'un chiffre provenant d'un registre (cf. ta question précédente) dont tu connaitras a priori la taille dans l'implémentation réelle. Donc en sécuriser l'usage a un intérêt limité pour obtenir des chiffres, mais vois quand même https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1043372399&id=1043284385 si tu veux comprendre pourquoi il est préférable de faire autrement si c'était une véritable saisie que tu attendais dans ton application.


Dal
0
Utilisateur anonyme
15 avril 2013 à 17:12
J'ouvre une petite parenthèse
Je vois sur un autre topic que ce code est destiné à tourner sur un microcontrôleur.
Si c'est bien le cas, alors void main (void) sera certainement la bonne déclaration dans la version finale, et il ne devra pas y avoir de return dans le main car il n'y aura pas d'OS à qui rendre la main en fin d'exécution.
0