Séparateur manquant


#1

Bonsoir à tous,

Je viens vous voir, car je suis sous atom et j’essaie de compiler du code en C, celui-ci est le plus simple possible en guise de test, mais j’ai toujours le même message, à savoir “séparateur manquant arrêt”.

Quelques recherches m’ont permis de comprendre que ce message est courant quand il y a des soucis d’espacements, mais là ça n’est pas le cas. J’ai également suite à mes recherches essayées d’exécuter un
make -f nomduprogramme
celui-ci m’indique qu’il y a un souci sur la ligne du int main (), mais impossible de savoir lequel …

Voici le code en question si ça peut aider …

#include <stdio.h>
#include <stdlib.h>
int main ()
{
printf("Hello world!");
return (0);
}

Il est on ne peux plus basique pourtant !

Merci d’avance à tous !


#2

Bonjour,

Ça fait un petit moment que je n’ai pas pratiqué, mais ne serait-ce pas le fait d’avoir mis l’accolade à la ligne? Sinon, as-tu essayé avec un IDE dédié type CodeBlocks ?


#3

Je dirais que l’espace entre ‘main’ et les parenthèses est de trop.


#4

Bonjour

Pour pouvoir voir quels sont les caractères
qui sont contenus dans le fichier nomduprogramme
regarde le retour de la ligne de commande suivante :

hd nomduprogramme 

Merci.


Ça devrait donner ce qui suit :

michel@debg53sw:~$ hd nomduprogramme
00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|
00000010  68 3e 0a 23 69 6e 63 6c  75 64 65 20 3c 73 74 64  |h>.#include <std|
00000020  6c 69 62 2e 68 3e 0a 69  6e 74 20 6d 61 69 6e 20  |lib.h>.int main |
00000030  28 29 0a 7b 0a 70 72 69  6e 74 66 28 22 48 65 6c  |().{.printf("Hel|
00000040  6c 6f 20 77 6f 72 6c 64  21 22 29 3b 0a 72 65 74  |lo world!");.ret|
00000050  75 72 6e 20 28 30 29 3b  0a 7d 0a                 |urn (0);.}.|
0000005b
michel@debg53sw:~$ 

Quelle ligne de commande a été entrée pour lancer cet essai de compilation ?

michel@debtest:~$ mv nomduprogramme{,.c}         # Renommer le fichier en y ajoutant le nom d'extension '.c'
michel@debtest:~$ 
michel@debtest:~$ gcc nomduprogramme.c -o hello  # Compiler le fichier 'nomduprogramme.c' en un exécutable qui sera nommé 'hello'
michel@debtest:~$ 
michel@debtest:~$ ./hello                        # Lancer l'exécution du programme 'hello' qui vient d'être créé
Hello world!michel@debtest:~$ 
michel@debtest:~$ 

Le programme hello s’est bien exécuté,
il a bien affiché ce qu’on lui demandait : le message “Hello world!” sans retour à la ligne,
ce qui fait que le prompt de retour de commande est collé à la suite du message.

Pour qu’il affiche ce même message en terminant l’affichage par un retour à la ligne,
il faudrait changer la ligne de commande d’affichage du message
par :

printf("Hello world!\n")

si le contenu du fichier nomduprogramme est celui qui est cité dans ton premier message,
alors ce n’est pas un fichier utilisable par la commande make

Comme le contenu du fichier nomduprogramme
ne correspond pas à la syntaxe d’un fichier de type Makefile
le retour de la commande :

make -f nomduprogramme

devait logiquement être :

michel@debtest:~$ make -f nomduprogramme
nomduprogramme:3: *** missing separator. Arrêt.
michel@debtest:~$ 

J’ai donc créé un fichier Makefile qui sera utilisable avec la commande make
pour la compilation du fichier nomduprogramme.c en un exécutable qui sera nommé hello

michel@debtest:~$ cat Makefile        # Afficher le contenu du fichier `Makefile`
hello : nomduprogramme.c
	gcc nomduprogramme.c -o hello
michel@debtest:~$

On peut maintenant lancer avec la commande make
la compilation du fichier nomduprogramme.c

michel@debtest:~$ make -f Makefile    # Lancer la compilation en utilisant le fichier 'Makefile'
gcc nomduprogramme.c -o hello
michel@debtest:~$                     

NOTE :
Si le nom du fichier à utiliser avec la commande make est Makefile
il n’est pas nécessaire de le spécifier dans la ligne de commande
=> un simple make suffira à lancer la compilation en utilisant (par défaut) le fichier nommé Makefile


#5

Bonjour, j’ai changé de compte petit soucis avec l’ancien

@sk4hrr Oui j’ai essayé avec codeblocks.

@Sputnik93 Non ce n’est pas ça j’ai essayé sans cette espace le résultat est le même …

Voici le résultat de la commande :

00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|
00000010  68 3e 0a 23 69 6e 63 6c  75 64 65 20 3c 73 74 64  |h>.#include <std|
00000020  6c 69 62 2e 68 3e 0a 69  6e 74 20 6d 61 69 6e 20  |lib.h>.int main |
00000030  28 29 0a 7b 0a 70 72 69  6e 74 66 28 22 48 65 6c  |().{.printf("Hel|
00000040  6c 6f 20 77 6f 72 6c 64  21 22 29 3b 0a 72 65 74  |lo world!");.ret|
00000050  75 72 6e 20 28 30 29 3b  0a 7d 0a                 |urn (0);.}.|
0000005b 

Micp Voici le résultat de la commande que tu m’as donné :

./MonProgramme.c 
./MonProgramme.c: ligne 3: erreur de syntaxe près du symbole inattendu « ( »
./MonProgramme.c: ligne 3: `int main ()'

#6

Hélas, on ne voit ni le prompt de départ, ni la ligne de commande, ni le prompt de retour,
on ne peut donc pas savoir dans quel contexte la ligne de commande a été entrée,
ni quelle était la ligne de commande, ni si elle s’est bien terminée.

Il nous reste donc à essayer d’envisager toutes les possibilités,
et essayer de trouver laquelle de ces possibilités
pourrait donner un tel retour de commande, (ce que je n’ai pas le temps de faire).

Cela dit, le retour de la commande hd nomduprogramme que je donnais dans mon message
est rigoureusement identique au premier bloc de texte qui est affiché dans ton message
S’il s’agit du fichier à compiler, il devrait être compilable et donner un exécutable tout-à fait fonctionnel.

Même remarque que ci-dessus.