Salut je galere sur un programe tout con xD help codeblock
Fermé
programeurDuDimanche
Messages postés
25
Date d'inscription
jeudi 22 janvier 2015
Statut
Membre
Dernière intervention
27 janvier 2015
-
Modifié par Whismeril le 22/01/2015 à 06:57
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 janv. 2015 à 16:19
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 janv. 2015 à 16:19
A voir également:
- Salut je galere sur un programe tout con xD help codeblock
- Codeblock - Télécharger - Langages
- Que veut dire xd ✓ - Forum Réseaux sociaux
- Ça veut dire quoi xd ✓ - Forum Loisirs / Divertissements
- Demande de xd ✓ - Forum Matlab
- Comment enregistrer un brouillon instagram dans sa galerie - Guide
5 réponses
Zephirr
Messages postés
317
Date d'inscription
mardi 30 décembre 2014
Statut
Membre
Dernière intervention
6 novembre 2015
100
22 janv. 2015 à 06:51
22 janv. 2015 à 06:51
Il faut mettre des {} au début et a la fin de ta fonction en non des ().
programeurDuDimanche
Messages postés
25
Date d'inscription
jeudi 22 janvier 2015
Statut
Membre
Dernière intervention
27 janvier 2015
2
22 janv. 2015 à 09:24
22 janv. 2015 à 09:24
Cool Merci!
programeurDuDimanche
Messages postés
25
Date d'inscription
jeudi 22 janvier 2015
Statut
Membre
Dernière intervention
27 janvier 2015
2
22 janv. 2015 à 09:54
22 janv. 2015 à 09:54
rE, Mince code block ma pas die toute les érreurs je remet ma compilation :
Merci d'avence.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int resultat = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0;
printf("tu a la chance de tester ma calculatrice ! \n\n");
printf("entre le nombre1\n\n");
scanf ("%d", &nombre1);
printf("entre le nombre2 si tu l'ose !\n\n");
scnaf("%d", &nombre2);
printif("et le dernier!\n\n");
scnaf("%d",&nombre3);
resultat = nombre1 +nombre2 +nombre3;
printf ("%d + %d + %d = %d\n\n",nombre1, nombre2 ,nombre3 ,resultat);
return 0;
}
Merci d'avence.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int resultat = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0;
printf("tu a la chance de tester ma calculatrice ! \n\n");
printf("entre le nombre1\n\n");
scanf ("%d", &nombre1);
printf("entre le nombre2 si tu l'ose !\n\n");
scnaf("%d", &nombre2);
printif("et le dernier!\n\n");
scnaf("%d",&nombre3);
resultat = nombre1 +nombre2 +nombre3;
printf ("%d + %d + %d = %d\n\n",nombre1, nombre2 ,nombre3 ,resultat);
return 0;
}
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
22 janv. 2015 à 10:32
22 janv. 2015 à 10:32
$ gcc -Wall progdudim.c
progdudim.c: In function `main':
progdudim.c:12:2: warning: implicit declaration of function `scnaf' [-Wimplicit-function-declaration]
progdudim.c:13:2: warning: implicit declaration of function `printif' [-Wimplicit-function-declaration]
/tmp/cc8zGRHv.o: In function `main':
progdudim.c:(.text+0x72): undefined reference to `scnaf'
progdudim.c:(.text+0x7e): undefined reference to `printif'
progdudim.c:(.text+0x92): undefined reference to `scnaf'
collect2: error: ld returned 1 exit status
Les messages d'erreur sont pourtant clairs
c'est scanf et non scnaf
c'est printf et non printif
Dal
programeurDuDimanche
Messages postés
25
Date d'inscription
jeudi 22 janvier 2015
Statut
Membre
Dernière intervention
27 janvier 2015
2
22 janv. 2015 à 10:39
22 janv. 2015 à 10:39
je suis une Merde sinon merci!
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 22/01/2015 à 11:50
Modifié par [Dal] le 22/01/2015 à 11:50
Non, il faut juste apprendre à interpréter les messages d'avertissement et d'erreur provenant des différentes phases de la construction de l'exécutable, cela aide à la compréhension.
Là j'ai lancé le compilateur gcc en ligne de commande avec l'option -Wall qui affiche des "warnings". Sous Codeblocks, je suppose que tu utilises aussi gcc (si tu as installé la version de Codeblocks avec MinGW sous Windows).
Vérifie que ton projet est paramétré pour signaler tous les warnings (Project - Build options - Clique sur la racine du projet - onglet Compiler settings - Compiler flags - coche "Enable all compiler warnings [-Wall]".
En principe, les projets sont paramétrés par défaut par Codeblocks avec -Wall (qui signifie "Warnings: all").
Le compilateur peut donc afficher des erreurs ou des avertissements. L'erreur qui s'affichait en premier lorsque tu as posté ton message d'origine (celle concernant l'absence d'accolades) était une erreur de syntaxe.
Voyons la suite.
Le compilateur tente de compiler le programme progdudim.c :
Le compilateur rapporte des avertissements et non des erreurs à ce stade, car la déclaration implicite de fonctions est permise dans le standard C89. Le compilateur ne sais pas où la fonction "scnaf" est définie (ni "printif"), mais espère qu'il pourra savoir quoi en faire plus tard. Lorsque ces déclarations implicites sont faites le compilateur considère que la fonction retourne un int et que ses arguments peuvent être n'importe quels arguments.
A ce stade, la compilation de progdudim.c est terminée, mais l'exécutable n'est pas encore créé, seul le fichier objet (un .o) a été créé.
La création de l'exécutable suppose de lier les fichiers objets créés (entre eux s'il y a en plusieurs et) avec la bibliothèque standard et les bibliothèques externes éventuellement utilisées. Cela est fait par l'éditeur de liaison.
A ce stade, l'éditeur de liaison est incapable de trouver où sont effectivement définies les fonctions "scnaf" et "printif" et il retourne une erreur "undefined reference".
En ligne de commande, on voit d'ailleurs que l'erreur n'est pas renvoyée par gcc, mais par ld (le linker du projet GNU).
A partir du standard C99, la déclaration implicite de fonctions n'est plus admise, et est considérée comme une erreur.
gcc va compiler en C89 par défaut (en fait pas seulement, car gcc introduit aussi des extensions GNU au C), il faut préciser -std=c99 pour compiler en C99, mais pour réellement faire en sorte que ce type d'erreurs bloquent dès le stade de la compilation, il faut spécifier -Werror, ce qui va traiter tous les avertissements comme des erreurs.
De manière générale, il faut comprendre la raison de tous les warnings générés par ton code et les éliminer un par un (ou savoir très exactement ce que tu fais).
Dal
$ gcc -Wall progdudim.c
Là j'ai lancé le compilateur gcc en ligne de commande avec l'option -Wall qui affiche des "warnings". Sous Codeblocks, je suppose que tu utilises aussi gcc (si tu as installé la version de Codeblocks avec MinGW sous Windows).
Vérifie que ton projet est paramétré pour signaler tous les warnings (Project - Build options - Clique sur la racine du projet - onglet Compiler settings - Compiler flags - coche "Enable all compiler warnings [-Wall]".
En principe, les projets sont paramétrés par défaut par Codeblocks avec -Wall (qui signifie "Warnings: all").
Le compilateur peut donc afficher des erreurs ou des avertissements. L'erreur qui s'affichait en premier lorsque tu as posté ton message d'origine (celle concernant l'absence d'accolades) était une erreur de syntaxe.
Voyons la suite.
Le compilateur tente de compiler le programme progdudim.c :
progdudim.c: In function `main':
progdudim.c:12:2: warning: implicit declaration of function `scnaf' [-Wimplicit-function-declaration]
progdudim.c:13:2: warning: implicit declaration of function `printif' [-Wimplicit-function-declaration]
/tmp/cc8zGRHv.o: In function `main':
Le compilateur rapporte des avertissements et non des erreurs à ce stade, car la déclaration implicite de fonctions est permise dans le standard C89. Le compilateur ne sais pas où la fonction "scnaf" est définie (ni "printif"), mais espère qu'il pourra savoir quoi en faire plus tard. Lorsque ces déclarations implicites sont faites le compilateur considère que la fonction retourne un int et que ses arguments peuvent être n'importe quels arguments.
A ce stade, la compilation de progdudim.c est terminée, mais l'exécutable n'est pas encore créé, seul le fichier objet (un .o) a été créé.
La création de l'exécutable suppose de lier les fichiers objets créés (entre eux s'il y a en plusieurs et) avec la bibliothèque standard et les bibliothèques externes éventuellement utilisées. Cela est fait par l'éditeur de liaison.
A ce stade, l'éditeur de liaison est incapable de trouver où sont effectivement définies les fonctions "scnaf" et "printif" et il retourne une erreur "undefined reference".
progdudim.c:(.text+0x72): undefined reference to `scnaf'
progdudim.c:(.text+0x7e): undefined reference to `printif'
progdudim.c:(.text+0x92): undefined reference to `scnaf'
collect2: error: ld returned 1 exit status
En ligne de commande, on voit d'ailleurs que l'erreur n'est pas renvoyée par gcc, mais par ld (le linker du projet GNU).
A partir du standard C99, la déclaration implicite de fonctions n'est plus admise, et est considérée comme une erreur.
gcc va compiler en C89 par défaut (en fait pas seulement, car gcc introduit aussi des extensions GNU au C), il faut préciser -std=c99 pour compiler en C99, mais pour réellement faire en sorte que ce type d'erreurs bloquent dès le stade de la compilation, il faut spécifier -Werror, ce qui va traiter tous les avertissements comme des erreurs.
De manière générale, il faut comprendre la raison de tous les warnings générés par ton code et les éliminer un par un (ou savoir très exactement ce que tu fais).
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 22/01/2015 à 13:59
Modifié par fiddy le 22/01/2015 à 13:59
Bonjour,
Plusieurs fautes :
# <stdio.h>
Il manque #include
Ce sont des accolades pour entourer le bloc d'une fonction, pas des parenthèses.
printf("%d + %d + %d = %d\n\n",nombre1 + nombre2 +nombre3 = resultat);
Il y a 3 %d, il faut donc 4 arguments. Donc
Cdlt,
Google is your friend
Plusieurs fautes :
# <stdio.h>
Il manque #include
Ce sont des accolades pour entourer le bloc d'une fonction, pas des parenthèses.
printf("%d + %d + %d = %d\n\n",nombre1 + nombre2 +nombre3 = resultat);
Il y a 3 %d, il faut donc 4 arguments. Donc
printf("%d + %d + %d = %d\n\n", nombre1, nombre2, nombre3, resultat);
Cdlt,
Google is your friend
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
22 janv. 2015 à 16:19
22 janv. 2015 à 16:19