Bonjour ! L'erreur peut venir de la ligne ou des lignes qui précède(nt). Par exemple tu as peut-être ouvert plus d'accolades que tu n'en as fermées, ou le contraire.
Le mieux est de nous montrer la partie du programme concernée par le message d'erreur.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Insertion des images
Le forum dispose d’un outil pour poster des images directement dans vos messages via ce bouton : . Vous avez la possibilité d’y mettre soit une image depuis votre ordinateur, soit un lien direct si l’image est déjà sur Internet. Utilisez toujours l’outil d’intégration d’images du site, c’est la seule manière d’afficher des images dans vos messages.
Mauvais titre
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Pour modifier votre titre, éditez le premier message de votre sujet.
En fait, le problème n'est pas vraiment l'accolade, c'est le fait que tu l'as ouverte sans aucune raison ...
Généralement, la première accolade est celle qui délimite la fonction "main", qui est indispensable pour que ton programme fonctionne (comme l'ont dit les personnes plus haut).
Et pour revenir sur ce qu'a dit poweRiCube, "ça me le fait assez souvent", mais, sans mettre la fonction "main", ça ne peut pas marcher.
Sinon, normalement CodeBlocks te dit dans la zone du bas qu'il te manque un ";" avant l'accolade.
Bref, Voilà voilà
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
Mais, je ne comprend pas, quel est l'intérêt d'ouvrir un bloc comme ça ? Il me semble qu'en C, les variables sont détruites à la fin du bloc où elles ont été créés (ou je confond avec un autre langage) ?
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
En langage C, le compilateur s'attend à ce que chaque fonction possède un type de retour et des arguments.
intma_fonction(int argument)
En rouge :Le type de retour de la fonction.
En bleu :Le nom de la fonction
En vert :Le type de l'argument
En violet : Le nom de l'argument
Un fonction en C peut prendre plusieurs arguments, ils sont séparés par des virgules :
intma_fonction(int argument1, intargument2)
Dans le code que tu nous a fournis, ta fonction main ne possède pas d'arguments. Le compilateur ne comprends donc pas, il ne trouve pas d'arguments... Comme le précise Vanaur dans le message suivant, je me suis trompé. ma_fonction() peut être utilisé.
Du coup, il faut préciser au compilateur qu'on ne souhaite pas donner d'arguments à la fonction. Pour ce faire, on utilise le mot clé void.
Dans ton code, il faut donc écrire : intmain(void) et non pas : intmain()
intma_fonction() signifie que la fonction peut prendre un nombre quelconque d'arguments.
En langage C, le compilateur s'attend à ce que chaque fonction possède un type de retour et des arguments.
Dans le code que tu nous a fournis, ta fonction main ne possède pas d'arguments. Le compilateur ne comprends donc pas, il ne trouve pas d'arguments...
Du coup, il faut préciser au compilateur qu'on ne souhaite pas donner d'arguments à la fonction. Pour ce faire, on utilise le mot clé void.
Pas forcément, une fonction sans argument peut très bien ne pas être void, ou au contraire, une fonction void peut également prendre des arguments.
Dans ce cas-ci, selon le compilateur, la fonction principale peut ou peut ne pas prendre d'argument (GCC l'autorise normalement). Ça m'étonnerait que ce soit la source du problème, il semblerait que ça soit en effet une erreur de build plutôt que de compilation.
- Edité par vanaur 27 juin 2019 à 16:17:26
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
le problème c'est que sa revient tous le temps depuis quelques heures, j'ai beau build and run ou mettre void, sa fonctionne vraiment pas .. assez embêtant
Peux-tu nous donner le code de tous les fichiers .c, le linker est en train de dire que tu définis la fonction main dans plusieurs fichiers.
La fonction main est unique dans un programme, elle ne peut pas être à plusieurs endroits.
PS: j'ai demander l'utilisation du bouton </> pour le contenu de build log, je vais alors te demander d'utiliser ce bouton pour nous poster ton code afin de nous permettre une meilleure lisibilité.
J'ai l'impression que tu t'es peut-être trompé en créant ton fichier main.c .
En fait, ton fichier main.c se trouve dans le même projet que tes autres fichier.
Peut-être que je me trompe, mais je pense que tu voulais au départ créer ce fichier pour faire des trucs qui n'ont rien a voir avec tes autres fichiers, c'est ça ?
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
poweRiCube : Tu parle bien du bouton a coté de la touche majuscule ? si c'est ça j'ai beau appuyé rien ne se passe
j'ai pris le screen de mes documents on je mets toutes les fiches de programmation en C, je pense avoir suivi ce qui été dit dans le cour... bref le voici
ok je vois, je vais virer tous les fichiers sauf 1 et tous le reste je le partage en plusieurs dossiers merci ^^
mingw32-g++.exe -o bin\Release\c.exe obj\Release\Calcul.o obj\Release\conditions.o obj\Release\main.o obj\Release\variable.o -s
obj\Release\conditions.o:conditions.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
obj\Release\main.o:main.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
obj\Release\variable.o:variable.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: obj\Release\Calcul.o: bad reloc address 0xa in section `.text.startup'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
ok voila le code du debug, j'envoie aussi le code
#include <stdio.h>
#include <stdlib.h>
/*absolument se souvenir que c'est \ et pas / */
int main()
{
printf("Hello world!\nje suis une personne gentille\nqui ne ment jamais\n");
printf("hello guy\nhow are you?\n");
return 0;
}
En fait, l'idée c'est qu'il faut (*) que tu fasses un projet séparé pour chaque programme que tu fais.
Là, ce qui s'est passé
tu as démarré un projet avec un premier fichier .c contenant une fonction main(), jusque là tu vas bien
puis, pour faire d'autres exercices tu as as ajouter dans le MEME projet d'autres fichiers avec aussi un main()
et là ça ne va pas, parce qu'une fonction ne doit être déclarée qu'une fois.
d'où les messages, qu'il suffit de lire
// en regardant dans conditions.c, on trouve un main
// alors que main est déjà dans Calcul.c
obj\Release\conditions.o:conditions.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
// en regardant dans main.c, on trouve un main
// alors que main est déjà dans Calcul.c
obj\Release\main.o:main.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
// en regardant dans variable.c, on trouve un main
// alors que main est déjà dans Calcul.c
obj\Release\variable.o:variable.c:(.text.startup+0x0): multiple definition of `main'
obj\Release\Calcul.o:Calcul.c:(.text.startup+0x0): first defined here
(*)C'est pas tout à fait vrai, mais, pendant quelques mois pour commencer ça fera l'affaire.
Probleme avec les acolades qui forme une erreur
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-