Formation aux PIC

Oui.

N'importe quoi. Il ne faut pas =E9crire char *s =3D "literale"; C'est fini depuis plus de 20 ans. Ce fut une erreur car en fait c'est une literale const qu'on peut "vouloir" modifier sans erreur de compil avec un r=E9sulat non d=E9fini =E0 l'execution.

Ce n'est pas parce que ton programme compil sans warning qu'il n'y aura pas de pb =E0 l'execution.

Oui m=EAme =E0 ceux qui ont con=E7u le langage C.

20 ans de C, hein ?

Je t'encourage =E0 relire la norme, avant d'en parler. Tu peux m=EAme faire un suivi sur fr.comp.lang.c.

--

-Stan

Reply to
Stan
Loading thread data ...

C'est curieux comme remarque pour quelqu'un qui de permet de poster un code qui affiche une insulte.

--

-Stan

Reply to
Stan

On Sep 27, 6:34=A0pm, Stan

Ou ca un const ? Pas de const dans ta declaration. C'est toi qui est ind=E9fini.

[snip bullshit]

toto",

T'as raison, fais comme on t'a dit et marche au pas.

Reply to
Jean-Christophe

Tu as quelques lacunes en C.

Ici le pointeur n'est pas const. Tu peux l'incr=E9menter si tu veux, c'est m=EAme ce que tu as fais dans ton "programme".

Pour qu'il soit const =E9galement, il faut le d=E9clarer comme tel. C'est la syntaxe "*const" pour m=E9moire.

--

-Stan

Reply to
Stan

Ce n'est une insulte que pour celui qui se sent vis=E9. Tu affirmes sans argument et ne r=E9pond pas aux questions. Tu te poses en Grand Programmeur devant l'Eternel. Sais-tu que le monde tourne tr=E9s bien sans toi ? Comme je te l'ai d=E9ja dit (tu ne comprends pas vite) j'ai mieux a faire que de moucher les pr=E9tentieux.

Reply to
GuessWhat

On Sep 27, 6:45=A0pm, Stan

Et pourtant, si. Et si ca te prose un probleme, ca n'en pose aucun au compilo.

Pourquoi, parce-que TU l'interdis ?

Bravo.

Ton bla-bla ampoul=E9 n'est meme pas distrayant.

(soupir)

Dont tu regrettes de ne pas faire partie, sans doute.

Oui, et toi ? De la frime devant ceux qui font du Basic ?

Merci =F4 Grand Maitre.

Suis ta voie et je continue la mienne.

Reply to
GuessWhat

JE ne pr=E9tends pas le contraire.

Tu as quelques lacunes oculaires. Relis mon prog, je n'ai pas d=E9clar=E9 de pointeur en const.

Reply to
GuessWhat

On Sep 27, 9:35=A0pm, Jean-Christophe :

Laisse tomber ce troll.

Reply to
Slartibartfast

Lit ce document :

formatting link
au sous titre : Const Storage and String Literals.

C'est =E9galement indiqu=E9 dans la norme, mais je ne sais pas si on peut la consulter sans payer.

Je peux aussi te donner des r=E9f=E9rences de livre.

Je ne m'attend pas =E0 ce que tu sois honn=EAte, sinon tu aurais d=E9ja r=E9agis quand l'autre pr=E9tendait que le compilateur place une lit=E9rale char* =3D"chaine" en RAM. A moins que tu ignorais aussi que c'est faux.

Mais bon, c'est du troll, hein ?

--

-Stan

Reply to
Stan

On Sep 28, 9:44 am, Stan

#include int main( int argc, char *argv[] ) { char *p =3D "Salut "; printf( "%s", p ); strcpy( p+1, "tan." ); printf( "%s\n", p ); return 0; }

| Compiling ... test.c | Linking ... test.exe | 0 error(s), 0 warning(s)

C:>test.exe Salut Stan.

Reply to
Jean-Christophe

On Sep 28, 9:44 am, Stan

#include int main( int argc, char *argv[] ) { char *p =3D "toto\n"; printf(p); p[2] =3D 'i'; printf(p); }

| Compiling ... test.c | Linking ... test.exe | 0 error(s), 0 warning(s)

C:>test.exe toto toio

... CQFD !

Reply to
Jean-Christophe

Guillaume a écrit :

1/ franchement, le meilleur livre de formation aux PICs, c'est la datasheet du produit que tu comptes utiliser plus les notes d'application de microchip 2/ le meilleur langage a utiliser c'est l'assembleur, du moins pour debuter et tant que que tu n'auras pas a ecrire des programmes de taille importante; en l'utilisant tu maitriseras parfaitement le micro 3/ ensuite, le meilleur compilateur a utiliser, c'est celui que tu as et que tu connais. il est loin le temps ou certain langage permettait de faire ce que d'autres ne permettaient pas. 4/ enfin, en matiere de compilateur, le meilleur est celui dont le code produit par rapport a l'assembleur est le plus proche de 1: quand tu en seras là, amuses toi a comparer les performances de plusieurs compilos pour un programme donné, c'est tres instructif.

amuse-toi bien avec les µprocs, c'est passionnant

Reply to
geme

"Jean-Christophe" a écrit : On Sep 28, 9:44 am, Stan

Bon à mon tour de m'en mêler. Je ne veux pas te contrarier mais même si ton code se compile et s'exécute sans pb, il n'en est pas pour le moins buggé et risque de planter ton prog (voire le système?).

Tu as testé sur un PC, donc la chaîne de caractères est forcément stockée en RAM. Mais tu as fait déborder le buffer qui contenait

7 octets initialement (6 lettres + octet nul). La fonction strcpy() ajoute des caractères sans vérifier si suffisamment de mémoire est allouée...
Reply to
PovTruffe

On Sep 27, 1:08 pm, "maior=E9" :

int main( int argc, char *argv[] ) { char *p[] =3D "stn"; // maior=E9 return 0; }

| Compiling ... test.c | C:\C\test\test.c(3): error: 'p': array initialization needs curly braces | test.obj - 1 error(s)

Reply to
Jean-Christophe

J'ai fait un suivi sur fr.comp.lang.c pour que tu m'expliques ce que ce code est cens=E9 prouver.

C'est plus en charte.

--

-Stan

Reply to
Stan

Le fait de mettre CQFD ne prouve rien, sinon que tu ne connais pas le sens du mot 'ind=E9fini'.

Suivi sur fr.comp.lang.c.

--

-Stan

Reply to
Stan

On Sep 28, 11:14 am, "PovTruffe" :

.

Ah bon, voila autre chose !

Recompte mieux : "Salut " =3D 7 octets y compris le terminateur. "Stan." =3D 6 octets y compris le terminateur. Ou vois-tu un d=E9bordement de buffer ?

C'est vrai, mais cela n'a aucune incidence puisqu'ici le r=E9sultat est *moins* long que la chaine initiale.

Reply to
Jean-Christophe

Ca prouve que ton affirmation

est fausse.

Et ce n'est pas a *moi* de prouver que *tu* affirmes.

Reply to
Jean-Christophe

On Sep 28, 11:26 am, Stan

Je fais un test et ca donne "toio", c'est le contraire de ce que tu affirmes.

Bel exemple de mauvaise foi : ce n'est pas le texte "CQFD" qui est une preuve, c'est le fait que la chaine soit d=E9terministiquement modifiable - et contrairement =E0 ce que tu affirmes.

Drole de hasard qu'un r=E9sultat 'ind=E9fini' donne pr=E9cis=E9ment le r=E9sultat attendu !

Tu as besoin d'aide ? Tu n'es pas sur de toi ? Je n'ai aucun probl=E8me avec char *p=3D"toto"; le compilo non plus, et le runtime non plus. C'est toi qui me tarabuste avec tes couinages dignes d'un Nicklaus Wirth :

formatting link

Reply to
Jean-Christophe

Désolé mais comme on t'a dit, assigner une chaine constante à un pointeur et modifier les données fait planter suivant les système, en l'occurence sous unix par exemple:

pascal@etch64:~$ cat > bidule.c #include int main( int argc, char *argv[] ) { char *p = "toto\n"; printf(p); p[2] = 'i'; printf(p); } pascal@etch64:~$ make bidule cc bidule.c -o bidule pascal@etch64:~$ ./bidule toto Erreur de segmentation pascal@etch64:~$

Et voilà, ça pète comme prédit...

par conte les 2 exemples ci dessous sont corrects:

pascal@etch64:~$ cat > bidule.c #include int main( int argc, char *argv[] ) { char p[] = "toto\n"; // bidule.c #include #include int main( int argc, char *argv[] ) { char *p = strdup("toto\n"); //

Reply to
Pinball-Man

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.