# Un compilateur C pour newbie

**URL:** <https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 3:33 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356 "2016-02-20T15:33:33Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:34 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/21 "2016-02-20T15:34:04Z")

</div>

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 😉

---

<div class="post-metadata">

**Author:** ![ciol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/e274bd/32.png) [@ciol](https://www.debian-fr.org/u/ciol)\
**Post date:** [Février 20, 2016, 3:34 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/22 "2016-02-20T15:34:06Z")

</div>

> [@](#):
>
> si j’ai bien compris le message d’erreur ce serais les fichier “stdio” et “stdlib” qui seraient introuvables.  
> je pensais que c’était installé par défaut dans linux ?!!?

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

---

<div class="post-metadata">

**Author:** ![le\_petit\_chat\_noir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/6f9a4e/32.png) [@le\_petit\_chat\_noir](https://www.debian-fr.org/u/le_petit_chat_noir)\
**Post date:** [Février 20, 2016, 3:34 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/23 "2016-02-20T15:34:12Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![yanos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/a183cd/32.png) [@yanos](https://www.debian-fr.org/u/yanos)\
**Post date:** [Février 20, 2016, 3:34 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/24 "2016-02-20T15:34:41Z")

</div>

salut,

vous m’excuserez les mecs mais en ce moment mon pc tout neuf est en rade 👿 ,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”.

@+

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:34 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/25 "2016-02-20T15:34:41Z")

</div>

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/](http://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

```auto

```

Je trouve ca un peu long donc un alias dans le bashrc ou bash\_profile est tres interressant 😉

---

<div class="post-metadata">

**Author:** ![lost\_in\_shell](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/9f8e36/32.png) [@lost\_in\_shell](https://www.debian-fr.org/u/lost_in_shell)\
**Post date:** [Février 20, 2016, 3:37 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/26 "2016-02-20T15:37:25Z")

</div>

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 😉

[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]

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:37 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/27 "2016-02-20T15:37:26Z")

</div>

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

```auto

```

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

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:37 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/28 "2016-02-20T15:37:31Z")

</div>

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-code`pour un makefile on peut voir [mapage.noos.fr/emdel/make.htm](http://mapage.noos.fr/emdel/make.htm)

Ou tu configure ton environnement de développement pour 😃

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:37 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/29 "2016-02-20T15:37:33Z")

</div>

Ç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

> [@](#):
>
> $ gcc -[tous les flags de warnings]… 2\> /dev/nul

Déception…

---

<div class="post-metadata">

**Author:** ![Hoshin](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hoshin/32/3672_2.png) [@Hoshin](https://www.debian-fr.org/u/Hoshin)\
**Post date:** [Février 20, 2016, 3:37 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/30 "2016-02-20T15:37:35Z")

</div>

ah bah c’est sur que comme ca c’est silencieux 😛, 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 😛

---

<div class="post-metadata">

**Author:** ![yanos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/a183cd/32.png) [@yanos](https://www.debian-fr.org/u/yanos)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/31 "2016-02-20T15:43:33Z")

</div>

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 😮

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

@+

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/32 "2016-02-20T15:43:34Z")

</div>

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 :

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

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/33 "2016-02-20T15:43:34Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/34 "2016-02-20T15:43:35Z")

</div>

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 😉

```auto
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]);
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/35 "2016-02-20T15:43:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/36 "2016-02-20T15:43:35Z")

</div>

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

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](http://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.

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/37 "2016-02-20T15:43:37Z")

</div>

> [@](#):
>
> \* J’ai écrit des tas de programme sans faire de include stdio.h. Donc ça a un sens.

Quel genre d’appli ?

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/38 "2016-02-20T15:43:37Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![yanos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/a183cd/32.png) [@yanos](https://www.debian-fr.org/u/yanos)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/39 "2016-02-20T15:43:40Z")

</div>

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

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

```auto
/* 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:

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

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

```

@+

---

<div class="post-metadata">

**Author:** ![Hoshin](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hoshin/32/3672_2.png) [@Hoshin](https://www.debian-fr.org/u/Hoshin)\
**Post date:** [Février 20, 2016, 3:43 UTC](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356/40 "2016-02-20T15:43:41Z")

</div>

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

Le code (fichier 'test.c")

```auto
#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

```auto
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 😛.  
Ceci dit je sais pas trop ce qui cause ton problème …

[Page précédente](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356.md?page=1)

[Page suivante](https://www.debian-fr.org/t/un-compilateur-c-pour-newbie/6356.md?page=3)
