30

pencil & pencil smile

ça se simplifie en pencil
c'est bien connu que x & x = x !
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

31

32

c'est quoi un header file?
ç1

33

c'est un fichier .h qui sert à décrire les fonctions écrites dans un autre fichier
par exemple
main.c contient
#include <stdio.h>
int main(void) {
 printf("coucou\n");
 return 0;
}

le compilateur ne connaît pas printf, donc il va regarder dans stdio.h le format et il va pouvoir compiler ton fichier main.c (sans savoir ce que contient printf) et après, il va pouvoir s'occuper de réunir le code correspondant à printf et celui de ton fichier
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

34

Flanker :
c'est un fichier .h qui sert à décrire les fonctions écrites dans un autre fichier
par exemple
main.c contient
#include <stdio.h>
int main(void) {
 printf("coucou\n");
 return 0;
}

le compilateur ne connaît pas printf, donc il va regarder dans stdio.h le format et il va pouvoir compiler ton fichier main.c (sans savoir ce que contient printf) et après, il va pouvoir s'occuper de réunir le code correspondant à printf et celui de ton fichier


nan nan
il regarde pas dans le .h, mais a la place du #include <machin.h> il met le contenu du fichier machin.h pendant la compilation smile

C'est pour ça qu'on appel la première passe la "précompilation" le programme (cpp en l'occurrence dans le GCC) va chercher toutes les inctruction du précompilateur (#define, #include etc) et les traiter, c'est seulement après que le compilateur (cc1 ou c++, peut importe) va traiter le fichier final

C'est pour cela que si on a un fichier "include.h" contenant :
#include "include.h"
blablablabla

la précompilation va nous générer une erreur "recursive include error" ou qq chose du genre
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

35

et comment le compilateur fait quand il ya 2 sources file?
ç1

36

tu as source1.c et source2.c
chaque source est compilé séparément. ça donne
source1.o et source2.o (fichiers objets)

et ensuite, arrive la phase d'édition de liens (link), qui "colle" ensemble les différents fichiers objets, ainsi que les fonctions de librairies statiques
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

37

comment on fait pour une fonction qui prend plusieur argument?
pour les pointeur en argumentc'est:
void fonction(short *arg)
et
fonction(&var)
?
ç1

38

obligé que ca cross mais bon allons y :

plusieurs arguments :

void fonction(short a, char b, char * c);

pour passer des argument par adresse c'est bien ca smile

void fonction(short * ptr) {
*ptr = 0; // affecte 0 a l'adresse pointée par ptr
}

et l'appel :

...
short var;
fonction(&var);
...

Attention il faut bien sur que la variable var soit declarée en short et pas en short *

tu peux aussi passer des tableaux comme ca

ex:

...
short tab[ 3 ];
fonction(tab); // pas besoin de mettre & devant tab car le nom du tableau est un pointeur vers son premier element
...
(ca va affecter 0 au premier element du tableau)

Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

39

une fonction qui prend plusieurs arguemnts ?
comme avec un seul, mais en en mettant plusieurs, séparés par des virgules
type_retour ma_fonction(type1 arg1, type2 arg2, type3 arg3)
{
    printf("glop !");
    // et tu fais ce que tu veux avec tes arguments
}


pour les pointeurs, oué, comme tu dis

[edit] en effet, ça a crossé ^^ Félicitations LionelA cheeky
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

40

non en fait je me suis mal exprimé escusez moi en fait je voulais une fonction qui retourne plusieur arguments
(si c'est possible)
ç1

41

nan, une fonction ne renvoie qu'un résultat en C (Caml powa !)
par contre, tu peux retourner un tableau qui contient les différents résultats
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

42

./40> dans ce cas, la solution la plus simple est soit
- de retourner une structure contenant tes différentes éléments ; cela dit, c'est une solution un peu lourde : créer une structure uniquement pour ça... c'est moyen, question propreté, je trouve (avis perso, bien entendu)
- de "retourner" via les arguments, passés en pointeurs

genre, pour la seconde idée :
void swap(short *a, short *b)
{
    short temp = *a;
    *a = *b;
    *b = temp;     // Corrigé ; Merci Thepro (cf ./43)
}


et à l'appel :
short a=10, b=20;
swap(&a, &b);
// a==20, et b==10


sinon, retourner un tableau, comme le suggère Flanker... faut que tu saches ce que tu fais. par exemple, tu peux pas faire ceci :
short *ma_fonction(...)
{
    short tab[10];
    ...
    return tab;
}

du fait qu'à la fin de ta fonction, "tab" sera détruite (puisque allouée sur la pile au début de ta fonction => sera détruit à la fin de ta fonction ; c'est une variable locale à ta fonction, autrement dit)
une solution est d'allouer sur le tas, avec un malloc ; mais dans ce cas, il te faudra penser, à un moment où à un autre, à libérer (avec un free) ce qui aura été retourné par ta fonction (ce qui devient facilement lourd ; surtout si tu appelles souvent la fonction en question ^^ )
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

43

il y a aussi possibilité de retourner une structure et la c'est fait par copie donc pas de risque de destruction :
typedef struct mastructure {
  type1 element1;
  type2 element2;
  type1 element3;
}mastructure;

mastructure fonction(void) {
  mastructure ms;
...
  ms.element1 = untruc;
...
  return ms;
}


Je ne l'utilise pas très souvent alors si quelqu'un pouvait confirmer ca serait cool smile
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

44

squale92 :
void swap(short *a, short *b)
{
    short temp = *a;
    *a = *b;
    *b = *a;
}


et à l'appel :
short a=10, b=20;
swap(&a, &b);
// a==20, et b==10


??? (c'est faux ^^)

=> - "*b = *a" + "*b = temp"
avatar

45

c'etait surement un test pour voir si pegase avait compris grin
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

46

ah oué, merde, j'ai pas fait gaffe à ce que je tappais grin
effectivement, comme a corrigé Thepro :
void swap(short *a, short *b)
{
    short temp = *a;
    *a = *b;
    *b = temp;
}
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

47

le code de LionelA est bon, Par contre on ne peut pas faire :

short fonction(void)
{
  short tab[3];
  //
  return tab;
}
avatar

48

./47> en effet.
d'autant plus que tab est un tableau, et que ta fonction est déclarée pour retourner un seul entier (et non un pointeur sur le tableau)
(et de toute façon, vu que tab est local à la fonction, tu risques de retourner n'importe quoi (enfin, des valeurs non définies) ; me demande si gcc génére pas un warning, d'ailleurs, quand tu essayes de faire ça)
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

49

J’ai oublié "*" après le premier short ^^

Mais on peut faire :
short* fonction(void)
{
  short *tab=malloc(3*sizeof(short));
  //
  return tab;
}

void _main(void)
{
  short *tab;
  tab=fonction();
  //
  free(tab);
}

Il ne faut pas oublier le free.
avatar

50

Par contre, une doc de GCC, citée par mon prof de système, déconseille de retourner des structures avec les fonctions:
Returning structures is complicated and rarely useful

Enfin, pour dès structures très courtes (8 octets ou moins) Je ne sais pas si ça retourne comme une valaur normale (comme TI-GCC et les structures hSym) ou si ça utilise le mécanisme lourd...

PS:
void swap(short *a, short *b)
{
// a = A ; b = B
*a ^= *b; // a = A xor B ; b = B
*b ^= *a; // a = A xor B ; b = B xor (A xor B) --> b = A
*a ^= *b; // a = (A xor B) xor A --> a = B ; b = A
}
grin
(En fait, je trouve que c'est plus compliqué à comprendre que la version avec temp...)

Edit: Cross
Edit2: Corrigé, merci Thepro (Comme quoi, y'a pas qu'aux autres que ça arrive)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

51

- "a = (A xor A) xor A" + "a = (A xor B) xor A" ?
avatar

52

./50> encore plus lisible en une ligne ^^
a ^= b ^=a ^= b;
(enfin, +* si pointeurs ^^ )
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

53

" a ^= b ^=a ^= b;" ca ca ne compile pas (j'avais essayé il me semble)

edit : en fait ca met un warning "operation may be undefined"
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

54

#include <stdio.h>

int main(void)
{
        int a=10;
        int b=20;
        a ^= b ^= a ^= b;
        printf("a=%d b=%d\n", a, b);
}

$ gcc --version
gcc (GCC) 3.3.6 (Debian 1:3.3.6-6)

$ gcc test.c -o test.exe
$ ./test.exe
a=20 b=10


sous gcc 3.3, en tout cas, ça compile, sans warning, et ça marche nickel cheeky
(bon, ok, c'est pas la version inclue dans TIGCC ; j'ai pris le GCC de base parce que ma version de TIGCC est un peu vieille ; et flemme de dl une plus récente ; et flemme de lancer l'émulateur pour tester ^^ mais gcc, c'est gcc quand même, à la base, non ? )

et j'ai déjà utilisé ce truc sous MSVC 6, dans le temps, pour échanger le contenu de deux variables entières, et ça marchait aussi
(les collègues qui m'avaient demandé ce que ça faisait cette ligne ^^ )

même si la version de gcc dans TIGCC est plus récente (me semble que Kevin a fait passer à un gcc 4), c'est pas logique que ça marche plus...
enfin... quoique ^^

en tout cas
#include <tigcclib.h>

void _main(void)
{
        int a=10;
        int b=20;
        a ^= b ^= a ^= b;
        printf("a=%d b=%d\n", a, b);
}

compile parfaitement sous
$ tigcc --version
tigcc version 1.3.0 built for TIGCC/*nix version 0.96 Beta 4 r1


[edit] (Merci Kevin) si on met -Wall -Wextra comme flags, on aura des warnings
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

55

ok
encore quelques petites question en vrac:
c'est possible: short pointé,*pointeur; pointé=12;pointeur=&pointé+12; et que pointeur evolue en meme temps que pointé?
une variable declaré hors des fonction c'est crade apparement y'a t il autre chose avec fonction et tout?
comment fait on avec un pointeur sur un tableu de 2 dim?
ç1

56

"pointeur=&pointé+12;" n'est pas possible !

"une variable declaré hors des fonction c'est crade apparement y'a t il autre chose avec fonction et tout?" ?

"comment fait on avec un pointeur sur un tableu de 2 dim?"

void fonction(short tab[2][3])
{
  //
}

void _main(void)
{
  short tab[2][3];
  fonction(tab);
  //
}
avatar

57

Thepro
: "pointeur=&pointé+12;" n'est pas possible !

Pourquoi pas ? (ça va pointer n'importe où, mais c'est valide)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

58

desolé mais jai rien compris ou est le pointeur confus
edith cross tien je me disai qu'il n'y en avais pas ^^
ç1

59

bon j'ai pas lu tout le topic donc je sais pas si ça va répondre à ta question ou si tu sais déjà tout ça, mais regarde à tout hasard c'est un tuto que j'avais fait il y a un moment :

http://databob.free.fr/Volatile/Documents/Tutorials/Pointeurs2.htm
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

60