Compilateur erreur... Sur un commentaire

Résolu
Utilisateur anonyme -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir.

Voila, cela fait pas mal de temps que je programme en C mais je n'ai jamais vu une telle chose : le compilateur me renvoie une erreur sur un commentaire de type :
// commentaire

Alors qu'il n'est même pas censé le lire.
Voici l'erreur :
error: expected expression before '/' token|
error: stray '\351' in program|

Cela arrive lorsque j'ajoute simplement un commentaire à mon programme, et ce sur n'importe quel programme.
Sachez que je peux sans problème utiliser les commentaires de type :
/* Commentaire */

Mais c'est moins pratique.
Pouvez-vous m'aider ?



Merci.
EchoIsON.

5 réponses

  1. Utilisateur anonyme
     
    Salut,

    Vérifie qu'il ne manque pas les ";", "{ }", "( )" et ce genre de chose. Sinon colle un code typique entre les balises C dans l'éditeur de message.
    0
    1. Utilisateur anonyme
       
      Bonsoir.

      Non il ne manque rien.

      Voici un code par exemple :
      #include <stdio.h>
      #include <stdlib.h>
      
      int main(int argc, char *argv[])
      {
          int* mem = NULL;
      
          mem = malloc(sizeof(int)); //Le compilateur renvoie une erreur sur ce commentaire par ex.
          if (mem == NULL)
          {
              exit(0);
          }
      
          free(mem);
      
          return 0;
      }


      De toute manière peu importe, j'ai la même erreur ici :
      int main(int argc, char *argv[])
      {
          //Test
      
          return 0;
      }
      0
  2. Utilisateur anonyme
     
    Bonjour

    Tu n'aurais pas utilisé le caractère 'é' dans un nom de variable ?
    0
    1. Utilisateur anonyme
       
      Bonsoir.

      Non aucun accent, je vous invite à regarder le code-exemple que j'ai cité plus haut.
      0
      1. Utilisateur anonyme > Utilisateur anonyme
         
        Je parlais de l'erreur
        error: stray '\351' in program
        .
        \351 est l'écriture en octal du code ASCII de 'é'
        Le code que tu donnes ci-dessus donne aussi cette erreur
        error: stray '\351' in program
        ?
        0
  3. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    D'expérience, certains compilateurs C n'acceptent pas le // mais uniquement le /* */
    Tu es peut être dans ce cas.
    0
    1. Utilisateur anonyme
       
      Bonsoir.

      Merci pour votre réponse. Cependant, mon compilateur (qui est le même depuis toujours) acceptait les commentaires // avant.

      EchoIsON.
      0
  4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut EchoIsON,

    S'agissant de l'erreur
    error: expected expression before '/' token
    , comme le dit NHenry, certains compilateurs C n'acceptent pas le
    //
    mais uniquement le
    /* */
    .

    Selon la signature de ton message d'origine, ta configuration est :

    Configuration: Windows 7, Code::Blocks 16.01 compilateur GNU GCC, langage C

    Si oui, tu as peut être altéré la configuration par défaut des options de compilation de gcc, par exemple en lui passant l'option "-ansi", ce qui se fait par Codeblocks :

    - au niveau global dans Settings - Compiler and debugger ... - Bouton Global compiler settings - pour GCC - onglet Compiler flags - option "In C mode, support all ISO C90 programs (...) [-ansi]

    - au niveau du projet dans Project - Build options - racine du projet - pour GCC - onglet Compiler settings - onglet Compiler flags - option "In C mode, support all ISO C90 programs (...) [-ansi]

    Avec GCC cette option est l'une des options utilisable pour modifier le comportement du compilateur en lui demandant de vérifier le respect de la norme C89/90. Les
    //
    n'ont été admis par le standard C comme commentaires qu'à partir du standard C99.

    Compiles le code :

    int main(int argc, char *argv[])
    {
        //Test
    
        return 0;
    }

    et observe le contenu de la fenêtre "Build log", qui va contenir la ligne de commande exacte lancée avec gcc avec les options gcc.

    Vois la documentation de gcc pour avoir plus d'informations sur ce que font exactement les options choisies : https://gcc.gnu.org/onlinedocs/gcc/Option-Index.html#Option-Index

    Poste éventuellement le contenu de "Build log" et le contenu de "Build messages" si tu es perdu et que tu ne vois pas quelles options tu dois rectifier.

    Dal
    0
    1. Utilisateur anonyme
       
      Bonsoir.

      Merci pour toutes ces informations.
      En effet, le problème est réglé, dés que j'ai décoché "In C mode, support all ISO C90 programs. In C++ mode, remove GNU extensions that conflict with ISO C++" dans les options.

      En fin de compte, je ne sais pas si cette option était réellement utile. Si elle l'est, utiliser /* */ ne me dérange pas tellement.

      Merci à tous.
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Elle est utile si tu veux t'assurer d'écrire du code C compatible avec tous les compilateurs respectant le standard C89/90 (le premier standard du C datant de 1989) et maximiser ainsi la portabilité de ton programme.

      Si tel est ton objectif, tu devrais dans ce cas aussi cumuler l'option -ansi avec -pedantic ou -pedantic-errors pour d'avantages de contrôles.

      https://gcc.gnu.org/onlinedocs/gcc/Warnings-and-Errors.html#index-pedantic-4474

      Tu trouves d'avantages d'informations sur gcc et le statut de l'implémentation des différentes versions du standard du C sur ce compilateur là :

      https://gcc.gnu.org/onlinedocs/gcc/Standards.html


      Dal
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Probablement que tu as utilisé un caractère interdit (par exemple une espace insécable, etc.). Retape la ligne entièrement pour être sûr qu'elle soit propre (et non copier coller).
    Pour le reste, effectivement, // a été introduit dans la norme C99. Initialement, le C k&r puis ISO C89/90 ne reconnaît que le /**/. Mais t'aurais eu un message d'erreur explicite.
    0