Local function definitions are illegal

Résolu
BV91 Messages postés 16 Statut Membre -  
BV91 Messages postés 16 Statut Membre -
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 !

1 réponse

  1. Utilisateur anonyme
     
    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
    1. BV91 Messages postés 16 Statut Membre
       
      Merci beaucoup pour la réponse !
      J'ai déclaré la fonction à l'extérieur comme indiqué.
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
    3. BV91 Messages postés 16 Statut Membre
       
      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
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
    5. Utilisateur anonyme
       
      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