30

Bon, l'URL marche enfin smile C pas mal, même si y a qqs imprécisions par-ci par-là, et si y a qqs trucs qui ne sont pas définis (tu parles à plusieurs moments d'indentation, mais tu ne dis jamais clairement ce que c'est, ni comment il faut le faire et ce que ça apporte)...

Qd tu parles de && et ||, c'est important de dire que c'est une évaluation paresseuse (dans x && y, y n'est évalué que si x!=0)

Aussi, je pense que les #define avec arguments sont un truc très très piégeux qu'il vaudrait mieux réserver pour la toute fin et pas en introduction, en détaillant bien que c'est une substitution _textuelle_, et en parlant de tous les pièges que ça peut induire (pb des parenthèses autour des arguments, pb des parenthèses ou des ({...}) autour de l'expression entière, duplication des effets de bord...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

31

Et puis si jamais limmt, en C on appelle les "commandes" des instructions smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

32

limmt> Oui, mais tu es d'accord pour dire qu'un header ne contient pas de fonctions.
Je trouve que quand on écrit un tuto il faut être très pointilleux sur ce qu'on dit. Employer des phrases précises qui n'induisent pas d'ambiguité. Ta phrase n'est pas très claire. Il n'est pas indispensable que pour le début le lecteur sache vraiment ce qu'on contient un header, mais je pense que c'est mal d'essayer d'expliquer rapidement sans que ce soit rigoureux.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

33

Je trouve que quand on écrit un tuto il faut être très pointilleux sur ce qu'on dit.

en même temps, c'est chose extrémement difficile... surtout lorsqu'on n'a pas une expérience énorme du C... (je parle en connaissance de cause : c'était mon cas lorsque j'ai écrit la première version de mon tuto)
Et même avec de l'expérience, il n'est pas touojurs facile de faire comprendre quelque chose que l'on connait assez bien à quelqu'un qui ne le connait pas... et ce parce que certaines choses nous paraissent évidentes, alors qu'elles ne le sont pas pour le lecteur.

EN tout cas, bievenue, et bon courage, à la concurrence smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

34

Si tu parles du fait qu'avec TIGCC 0.95 les déclarations de symboles du type #define USE_TI89 sont obsolète, n'oublie pas de mentionner qu'on peut utiliser Project->Options... pour configurer la compilation, plutôt que d'utiliser #undef....
#define permet de définir quelque chose.
Pas très précis comme définition.
De toute façon, Pollux a raison, le préprocesseur a sa place bien plus loin dans l'apprentissage du C.
On peut définir une commande pour le programme: #define USE_KERNEL, par exemple pour faire un programme en mode kernel.
Si tu parles de ça, explique vraiment comment se passent les choses. Mais bon, c'est trop tôt, donc ne prend pas ça comme exemple ça sera plus pédagogique.

Voilà, j'ai seulement lu la première partie. Je regarderai le reste plus tard.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

35

limmt :
dsl j'ai pas d'autre serveur nulle part sad

Je peux le mettre sur Ti-Gen si tu veux.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

36

Juste un truc : ce n'est peut-être pas hyper important de parler de l'instruction goto.
Et je ne suis pas sûr que les raisons que tu donnes pour préférer l'utilisation de boucles à celle de goto soient correctes.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

37

III) Fonctions et variables dans le header

C'est une très mauvaise idée d'inciter les gens à mettre du code et des données dans les headers.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

38

Pour cela nous utiliserons une interruption inclue dans TIGCC, le DUMMY_HANDLER. C'est une interruption vide qui comprend uniquement "rte".
Faudrait peut-être expliquer ce qu'est "rte". Ou bien ne pas en parler.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

39

Vous avez vu que pour une chaîne de caractères nous avaons dû utiliser un pointeur. Un pointeur est en réalité, quelque soit le type, une variable de 4 octets contenant une adresse d'une autre variable.
Quel type ? Le type de quoi ? Pour l'instant tu n'as pas parlé de type, coment veux-tu que le lecteur devine ce que tu as mis ?
Et un pointeur contient une adresse, mais pas forcément l'adresse d'une autre variable, ça peut être l'adresse d'un bloc de RAM alloué.
Il est très conseillé d'assigner toujours la valeur NULL à un pointeur lors de sa déclaration, ce qui permet d'éviter les "pointeurs fous" qui pointent n'importe où et qui peuvent faire des dégats.
Je pense que tu devrais soit donner plus de précisions, soit ne pas en parler du tout, parce que là tu en parles vaguement sans vraiment expliquer le pourquoi de la chose.
II) Chaîne de caractères avec liste de char
Il suffit de déclarer une liste de char comme vu aux chapitres précédent et de faire pointer un pointeur vers un char vers nomvar[0].
Je n'ai rien compris neutral

avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

40

Sasume
: Juste un truc : ce n'est peut-être pas hyper important de parler de l'instruction goto.

Si! C'est une des instructions les plus importantes!
Et je ne suis pas sûr que les raisons que tu donnes pour préférer l'utilisation de boucles à celle de goto soient correctes.

En effet, "On a tendance à utiliser goto de moins en moins car il est plus efficace d'utiliser d'autres boucles comme if ou while." est doûteux, GCC peut convertir dans les 2 sens. Il y a des optimisations qui travaillent seulement sur des boucles codées telles quelles, mais ils sont en train de les remplacer par des optimisations plus flexibles qui peuvent reconnaître des structures de boucles. Et elles ne s'appliquent pas toujours. L'exemple donné m'a l'air clairement faux.

Testcase:
label:
clrscr();
if(ngetchx())
goto label;

-->
.L2:
	jbsr clrscr
#APP
	.xdef __ref_all___set_file_in_use_bit
#NO_APP
	.word _F_LINE+0x51
	tst.w %d0
	jbne .L2


do
clrscr();
while(ngetchx());

-->
.L2:
	jbsr clrscr
#APP
	.xdef __ref_all___set_file_in_use_bit
#NO_APP
	.word _F_LINE+0x51
	tst.w %d0
	jbne .L2


Identique instruction par instruction.

Et on peut souvent coder quelque chose de plus efficace en utilisant goto.
Sasume
:
Il est très conseillé d'assigner toujours la valeur NULL à un pointeur lors de sa déclaration, ce qui permet d'éviter les "pointeurs fous" qui pointent n'importe où et qui peuvent faire des dégats.
Je pense que tu devrais soit donner plus de précisions, soit ne pas en parler du tout, parce que là tu en parles vaguement sans vraiment expliquer le pourquoi de la chose.

Et puis les pointeurs NULL ne sont pas forcément mieux sans MMU. (Bon, il y a l'AI7, mais...)
II) Chaîne de caractères avec liste de char
Il suffit de déclarer une liste de char comme vu aux chapitres précédent et de faire pointer un pointeur vers un char vers nomvar[0].
Je n'ai rien compris neutral

Moi si, mais c'est parce que j'ai déjà une idée de ce qu'il veut dire. Un débutant ne comprendra pas, en effet.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

41

Kevin Kofler :
Et on peut souvent coder quelque chose de plus efficace en utilisant goto.

Mais on peut aussi souvent coder quelque chose de plus lisible sans utiliser goto. (Dans ce cas précis, la boucle do-while est beaucoup plus compréhensible).
avatar
;)

42

c'est aussi qu'utiliser le goto fout facilement le bordel dans la pile.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

43

* Dans ton chapitre 5, tu dis même pas ce qu'est un pointeur, tu dis a koi ca sert, sitou neutral
Un pointeur est une variable contenant une adresse ...

* je comprends pas l'intérêt de ton chapitre 6 ... tu as juste traduit en francais la doc koi != tuto

44

Flanker
: c'est aussi qu'utiliser le goto fout facilement le bordel dans la pile.

Non, pas avec un compilateur qui sait ce qu'il fait.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

45

Les compilateurs savent évidemment ce qu'ils font, mais ça fout qd même le bordel avec les déclarations type C99 (et les goto sont interdits dans ces cas-là, oui Kevin je suis au courant : c'est bien là le pb)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

46

Je précise:
* Il est permis de faire un goto vers l'intérieur ou vers l'extérieur de la portée d'une variable de taille constante, et c'est au compilateur de se débrouiller avec (au pire en extendant la portée de la variable). Évidemment, la variable ne sera pas initialisée si on fait ça.
* Il est permis de faire un goto vers l'extérieur de la portée d'une variable de taille variable (tableau C99 de taille variable), et la variable sera détruite par ce goto.
* Il est interdit de faire un goto vers l'intérieur de la portée d'une variable de taille variable (tableau C99 de taille variable).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

47

[Presque HS]En BasicPDS/QuickBasic, l'utilisation de GOTO conduit irrémédiablement à un débordement de la pile... C'est ce qui m'a vacciné contre leur utilisation[/p HS]
Il voulait écouter de la musique, mais celle de la lune lui suffisait. S’il avait pu, il aurait arrêté de respirer pour éviter de défaire cette journée, pour protéger ce qu’il avait vécu. C’est ainsi que la nuit le prit dans ses bras, lui accoudé à la fenêtre et elle l’enlaçant de son obscurité.

48

En QuickBASIC certainement pas, j'en ai utilisé des tonnes en QuickBASIC!
Le BasicBDS, je ne sais pas...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

49

Oups, erreur, BasicPDS... Bah j'avais une boucle infinie pour gérer les menus déroulant, et si je tournais en boucle dans les menus, au bout d'un temps n, j'avais un Stack Overflow :/ (ou alors il y avait un leak qq part confus, mais bon, c'était il y a longtemps).
Il voulait écouter de la musique, mais celle de la lune lui suffisait. S’il avait pu, il aurait arrêté de respirer pour éviter de défaire cette journée, pour protéger ce qu’il avait vécu. C’est ainsi que la nuit le prit dans ses bras, lui accoudé à la fenêtre et elle l’enlaçant de son obscurité.