Un compilateur C pour newbie

Tu peux regarder bluefish mais pour le C je ne sais pas du tout ce que ca vaut.

Pour scite emacs vi et nano oui il faut compiler avec gcc mais normalement jgrasp doit le faire automatiquement :wink:

Hmm c’est bizarre, peut être que ce n’est pas installé par défaut non plus sous etch.
le paquet concerné est libc6-dev, regarde s’il est installé avec :
apt-cache policy libc6-dev

D’autre part, une fois installés, stdio.h et stdlib.h sont dans /usr/include

Il faudrait aussi que tu installes le paquet apt-file, qui te permet de trouver dans quel paquet se trouve un fichier :

$ apt-file search /usr/include/stdio.h libc6-dev: usr/include/stdio.h

(avant que ça puisse marcher il faut faire apt-file update je crois bien).

regarde si stdio et stdlib(ou libstdio,libstdlib) sont dans /usr/include ou /usr/lib(sinon comme dit ciol ils sont dans le paquet libc6-dev, donc à installer).

puis ouvres le fichier /etc/ld.so.conf regarde si tu as ces lignes:

/lib /usr/lib /usr/include /usr/X11R6/lib

puis fait un ldconfig(en root je crois), essaye de recompiler ton programme et ca devrai passer

salut,

vous m’excuserez les mecs mais en ce moment mon pc tout neuf est en rade :imp: ,car je n’arrive à installer etch pour que le pc soit stable
je ne peux pas suivres vos conseils j’ai pas d’os, mais dès que j’ai solutionnner mon prob je vais refaire une autre tentative de compilation de mon fameux “ceci est mon premier programme C”.

@+

C’est con ca si etch ne passe pas essaye une sarge que tu upgrade en etch apres.

sinon apparemet gcc sans parametre serait tres “laxiste” il faudrait donc rajouter des options.

[quote=“extrait du site mapage.noos.fr/emdel/”] Par défaut, le niveau d’avertissement (Warnings) est très laxiste. Il est fortement recommandé d’utiliser la configuration minimale suivante :

-Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes
[/quote]

Ce qui donnerais un truc dans le genre

Je trouve ca un peu long donc un alias dans le bashrc ou bash_profile est tres interressant :wink:

De mon coté j’utilise çà

#$ gcc -Wall -pedantic fichier.c -o fichier_bin
comme çà coté warning je suis sur de ne pas en louper un seul :wink:

[EDIT]
coté cflags il m’arrive aussi d’utiliser

[quote]
#$ gcc -Wall -pedantic -march=k8 -O2 -pipe -fomit-frame-pointer fichier.c -o fichier_bin[/quote]

par contre je ne fais toujours pas de réelles différences entre , -march=k8 et -march=athlon64 , si quelqu’un à une idée
[/EDIT]

quote="Ashgenesis"
Ce qui donnerais un truc dans le genre

Je trouve ca un peu long donc un alias dans le bashrc ou bash_profile est tres interressant :wink:[/quote]Ou plutot un bon master de makefile modifiant CFLAGS.

Pour les options réservées aux experts en mode paranoiaque tu peux mettre ces options la -O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long -Wunreachable-codepour un makefile on peut voir mapage.noos.fr/emdel/make.htm

Ou tu configure ton environnement de développement pour :smiley:

Ça me rappelle ma déception quand j’avais compilé un paquet debian et j’avais constaté qu’il n’y avait aucun warnings. Je m’étais dit que le développeur était vraiment consciencieux jusqu’au moment ou une lecture plus attentive du Makefile montrait

Déception…

ah bah c’est sur que comme ca c’est silencieux :stuck_out_tongue:, même si je vois plus trop l’interret de mettre 15 flags si c’est pour tout rediriger dans null … il aurait pu les rediriger dans un snd au moins … comme ca on aurait littéralement pu dire que le compilateur braillait :stuck_out_tongue:

bon bon me revoila

j’ai réussi grâce à vous cette compilation . Mais résulte un problème mon bouquin… il contient une erreur.

[code]/* 02L01.c :Mon premier programme C */
#include <stdio.h>

main()
{
printf (“bonjour ! ceci est un programme C. \n”);
return 0;
}

[/code]

vous trouverez sans doute l’erreur immédiatement mais comment peut-elle se retrouverla dès les premières pages du bouquin.

c’est un livre de poche, mais quand même de 500pages plûtot pensé pour un user windows mais je ne pense pas que cela ai quelque chose à voir avec cela :open_mouth:

je recherche aussi un tuto sur gcc expliquant les commandes de base à connaitre pour la compilation , j’ai le manuel mais il est imbuvable pour l’instant

merci d’avance

@+

Peux-tu indiquer quelle erreur tu as, parceque la ça m’a l’air quand même bon …
Ch’tite remarque, moi j’aurais plutot fait :

void main()
{
   printf ("bonjour ! ceci est un programme C. \n");
} 

La norme dit que main est du type int et tu as oublié les includes moi je ferais plutôt comme ça[code]#include <stdio.h>

int main(void)
{
printf(“bonjour ! ceci est un programme C. \n”);
return 0;
}[/code]Pour ton bouquin ca peux arriver en générale ils n’utilisent pas forcement le meme compilateur et donc peux certains peuvent compiler alors que d’autres non.

Je n’ai pas oublié l’INCLUDE je ne modifiais qu’une partie du “source” … Un prog C sans stdio.h ça n’a pas de sens.

Quand à void main() c’est quand même avec main qu’on apprend void … Alors qu’après Kernighan et Ritchie aient décider qu’il fallait int, peut importe non ?

Tout ça ne nous dit pas pourquoi son prog refuse de compiler ! l’absence de void ou de int peut générer un warning, mais ne peut pas arrêter la compilation.

un nouveau pour le style :wink:

void main(int argc, char **argv)
{
if (argc<2)
  {
  printf("usage : hello <message>");
  }
else
  {
  printf("Nombre d'arguments : %s\n",(argc-1))
  for (i=1;i<=argc-1;i++)
    {
    printf("Message %d : %s\n",i,argv[i]);
    }
  }
}
  • J’ai écrit des tas de programme sans faire de include stdio.h. Donc ça a un sens.

  • Il n’est pas obligatoire que main renvoit un int, simplement, intégré dans un unix, un programme renvoit systématiquement un code d’erreur même si celui ci est aléatoire. Un foncton void est une fonction qui renvoit un code indifférent puisque de toute façon un entier est renvoyé.

  • Mettre int ou void devant main est un bon réflexe mais n’est pas obligatoire.

La seule erreur ici serait que main renvoit explicitement un entier ce qui n’est pas explicité. Un gcc -Wall te mettra un warning, un gcc tout court ne te dira rien. Le tout a un intérêt limité car si il n’y a que ce type d’erreur que tu fais, c’est bon, tu sais bien programmer.

debianhadic désolé j’ai confondu les sources j’ai bien compris que tu avais modifié seulement une partie :smiley:

En ce qui concerne le type de main tout est en relation avec les normes si tu veux développer dans un langage je trouve qu’il est normal et logique de respecter les dernières normes en vigueur de se langage. Et en C99 main est du type int.

Plus d’info dessus mapage.noos.fr/emdel/notes.htm#typemain

Je ne dis pas que les autres manières d’écrire main ne fonctionnent pas mais elles peuvent généré un comportement indéfini et donc mettre en péril la sécurité de ton application.

Quel genre d’appli ?

Ne serait ce que des applications systèmes, des systèmes de communications entre procédures par exemple, ou encore un système de gestion de fichiers à base de Btree, etc (ça utilise open, read, write donc rien dans stdio.h). La gestion des douilles n’y est pas non plus bref, ça ne contient que les entrées/sorties sur les canaux classiques fichiers haut niveau (mais pas bas niveau open, read, write, fseek et close, …
Ça intervient souvent mais ça n’est pas systématique.

bon bon… je vois que mon post déchaine les passions

j’ai reussi ma compilation, voila le code que j’ai compilé

/* 02L01.c :Mon premier programme C */
#include <stdio.h>

int main()
{
	printf ("bonjour ! ceci est un programme C.\n");
	return 0;
}

vous noterez que j’ai rajouté " int" ,je vous assure que sans cela ne marche pas .

ma question c’était pourquoi le programme du bouquin ne marche chez moi ? alors que visiblement il n’est pas “faux” pour certain d’entre vous. avez vous reussi à le compiler?

le prog du bouquin:

/* 02L01.c :Mon premier programme C */
#include <stdio.h>

main()
{
	printf ("bonjour ! ceci est un programme C.\n");
	return 0;
}

@+

Bah écoute mon compilateur me pond un warning sans le type de retour de main (normal) mais sinon :

Le code (fichier 'test.c")

#include <stdio.h>

int main()
{
   printf ("bonjour ! ceci est un programme C.\n");
   return 0;
}

La compil avec un minimum de warnings et l’execution

hoshin@grotux:~$ gcc -Wall test.c
hoshin@grotux:~$ ./a.out
bonjour ! ceci est un programme C.

Vu ce qu’utilise ton programme je doute que cela soit un problème de version de gcc :stuck_out_tongue:.
Ceci dit je sais pas trop ce qui cause ton problème …