Pages : 1
#1 Le 13/03/2006, à 14:18
- Tex-Twil
probleme gcc-4.0
Bonjour,
j ai un probleme de newbie de Linux
Je viens d installer Ubuntu et gcc-4.0 avec Synaptic mais j ai une erreur a la compilation d un simple programme de Hello Word:
#include <stdio.h>
int main()
{
printf("Hello Word\n");
}
Et l erreur:
jan@ubuntu:~/test$ gcc-4.0 test.c
test.c:1:19: error: stdio.h: No such file or directory
test.c: In function ‘main’:
test.c:5: warning: incompatible implicit declaration of built-in function ‘printf’
jan@ubuntu:~/test$
D ou ca peut venir ?
merci
Hors ligne
#2 Le 13/03/2006, à 14:52
- gpocentek
Re : probleme gcc-4.0
Salut !
Il te manque tout simplement stdio.h
Tu l'auras en installant le paquet libc6-dev.
Hors ligne
#3 Le 13/03/2006, à 15:26
- Tex-Twil
Re : probleme gcc-4.0
Thanks dude
Hors ligne
#4 Le 14/03/2006, à 12:58
- ianic
Re : probleme gcc-4.0
Petite précision, tu devrais mettre un appel à "return" à la fin de ta fonction étant donné que main retourne un entier.
#include <stdio.h>
int main()
{
printf("Hello Word\n");
return 0;
}
Le compilateur aurait du le signaler... pour en être sûr je conseille de compiler avec -Wall : gcc-4.0 -Wall test.c
Hors ligne
#5 Le 15/03/2006, à 10:14
- gapz
Re : probleme gcc-4.0
Et le void aussi, non ? :
#include <stdio.h>
void main()
{
printf("Hello Word\n");
return 0;
}
Real programmers code in binary :: http://gapz.tuxfamily.org
Hors ligne
#6 Le 15/03/2006, à 10:31
- Xaero
Re : probleme gcc-4.0
main() renvoie (et devrais toujours renvoyer) un entier, et non void.
Ça sert principalement à pouvoir tester la sortie d'un programme (success ou failure).
Là aussi gcc dois avertir que main() dois renvoyer un entier .
Think you are addicted ? Quake makes you feel it !
jEdit : Un éditeur qu'il est bien !
FreeMind : Un programme qu'il est bien aussi !
Hors ligne
#7 Le 15/03/2006, à 22:32
- ianic
Re : probleme gcc-4.0
En fait "void main()" va fonctionner car c'est un prototype de fonction qui respecte la grammaire du langage.
Ensuite dans la norme C actuelle (C99), il est marqué que main renvoie un entier. Mais bon ca reste une norme et gcc est plutôt souple par rapport à celle-ci.
Il est donc fortement conseillé de retourner une valeur. D'ailleurs n'importe quel programme que vous utilisez renvoie une valeur informant le système de la fin et permettant éventuellement un post traitement.
Je rajouterais qu'une fonction void ne demande pas de retour (même si c'est accepté ça ne sert à rien). D'ailleurs ceci est une procédure et non une fonction, c'est-à-dire que l'on attend pas de retour.
Hors ligne
#8 Le 16/03/2006, à 23:17
- gene69
Re : probleme gcc-4.0
l'éthernel débat...
Moi je pense qu'on n'est pas meilleur que la norme: je fais enlever systématiquement les "void main (void){} "
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#9 Le 16/03/2006, à 23:24
- ianic
Re : probleme gcc-4.0
d'ailleurs "int main(void)" ou "int main(int argc, char **argv)" ?
Hors ligne
#10 Le 17/03/2006, à 09:39
- Xaero
Re : probleme gcc-4.0
Ça dépends si ton programme attends des paramètres, certains compilos te dirons que tu ne te sers pas de argc et/ou argv donc il te met un warning, donc là t'as plusieurs solutions style affecter deux variables bidons et là il te laisse tranquille (je pense à VC++ qui pour un while ( 1 ) { ... } va te dire que c'est toujours constant et tu ne peux pas virer le warning ... à moins de déclarer une variable = 0 + 1 et tu le met en condition du while), ou alors mettre void en paramètre de main.
Think you are addicted ? Quake makes you feel it !
jEdit : Un éditeur qu'il est bien !
FreeMind : Un programme qu'il est bien aussi !
Hors ligne
#11 Le 17/03/2006, à 09:58
- ianic
Re : probleme gcc-4.0
C'est pas ce que je demandais avec ma question
Par exemple "void main (void)" est juste selon la grammaire du langage C. C'est un proto de fonction tout à fait correct. Mais du fait que c'est la fonction main, il y a des particularités dans la norme.
Les arguments argc et argv ne sont pas nécessaire si tu ne t'en sers pas mais est-ce qu'ils sont tout de même "obligatoires" au meme titre que le retour int ?
De plus j'ai jamais vu de compilo qui balance un warning si tu utilises pas argc et argv... Encore que VC++ je veux bien le croire
Actuellement le meilleur compilo reste à mon avis xlc (IBM), avec des messages d'erreurs clairs et des capacités d'optimisations très poussées.
Hors ligne
#12 Le 17/03/2006, à 10:06
- Xaero
Re : probleme gcc-4.0
Oui c'est VC++ qui balance des warning pour ça en level4 uniquement.
Personnellement je met toujours int main(int argc, char** argv) même si je ne me sert pas des arguments (bon à part sur VC++ si on est en level4 mais on s'en sert qu'a la fac ...).
Mais je ne sais pas si c'est réellement obligatoire, néanmoins dans tout les livres que j'ai vu, le prototype de main était toujours avec argc et argv.
Think you are addicted ? Quake makes you feel it !
jEdit : Un éditeur qu'il est bien !
FreeMind : Un programme qu'il est bien aussi !
Hors ligne
Pages : 1