Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

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 smile.

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.

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 smile
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 smile
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.

Hors ligne