Compilateur erreur... Sur un commentaire

Résolu
Utilisateur anonyme -  
fiddy Messages postés 11069 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

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
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
Utilisateur anonyme
 
Bonjour

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

Non aucun accent, je vous invite à regarder le code-exemple que j'ai cité plus haut.
0
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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
D'expérience, certains compilateurs C n'acceptent pas le // mais uniquement le /* */
Tu es peut être dans ce cas.
0
Utilisateur anonyme
 
Bonsoir.

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

EchoIsON.
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
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
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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