Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/05/2008, à 23:57

reedlou

[C] Débutant - Tableau multidimensionnel

Bonsoir à toutes et tous.

Voila je suis nouveau sur Ubuntu (cela tourne vraiment très vite c'est impeccable) et dans le monde de la programmation. En ce moment je m'entraine à bien maitriser les bases du C afin de commencer la SDL histoire de tenter quelques petites choses sympa.

Donc pour l'instant mon but est de créer un Puissance 4 jouable directement à partir de la console mais malheureusement je ne comprends rien aux tableaux multidimensionnels qui me permettraient de réaliser la grille et la gestion des pions.

J'ai cherché de nombreux tutoriels sur internet comme par exemple le site du zéro, développez.com mais aussi france-ioi et malheureusement j'ai vraiment du mal à bien comprendre comment cela fonctionne. J'ai essayé de regarder dans les livres a la maison comme la collection pour les nuls mais je dois avouer que je bloque toujours autant sur le sujet. Je suis pire que nul je pense. lol

Je cherche donc une âme charitable qui pourrait m'expliquer les secrets de ces tableaux qui me détestent tant ! Je comprends très bien les pointeurs, les structures, etc... mais je ne sais pas pourquoi, ça sa bloque.

Merci encore et bonne soirée ! wink

#2 Le 23/05/2008, à 00:16

philpep-tlse

Re : [C] Débutant - Tableau multidimensionnel

Hum, un tableau a 2 dimension c'est comme une matrice en maths :

int tab[2][2] = {{1, 2}, {3,4}};

Après c'est plus sportif si tu met des chaines de caractères dedans... Mais globalement l'idée est là


le "lol" est aux boulets ce que le ";" est aux programmeurs
blog | Wiki Fvwm | Essayez le Window Manager From Scatch | Topic WMFS

Hors ligne

#3 Le 23/05/2008, à 00:20

reedlou

Re : [C] Débutant - Tableau multidimensionnel

Je te remercies pour ta réponse, j'ai compris comment le créer mais je n'arrive pas à initialiser le tableau par exemple pour que chaque case comporte les caractères [ ] grâce à une boucle comme for. Comment l'afficher je sais pas, j'ai du mal a manipuler le tableau.

#4 Le 23/05/2008, à 00:25

philpep-tlse

Re : [C] Débutant - Tableau multidimensionnel

Avec des pointeurs, ça donne un truc comme ça :

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
        int tab[2][2] = {{1,2}, {3,4}};
        int *i = *tab;
        int j;
        for (j = 0; j < 4; j++)
                printf("'%d'\n", i[j]);
        return 0;
}

le "lol" est aux boulets ce que le ";" est aux programmeurs
blog | Wiki Fvwm | Essayez le Window Manager From Scatch | Topic WMFS

Hors ligne

#5 Le 23/05/2008, à 00:31

reedlou

Re : [C] Débutant - Tableau multidimensionnel

Merci de ton aide je vais perdurer mes efforts !

Très bonne nuit et merci encore smile

#6 Le 24/05/2008, à 05:15

pixi-pix

Re : [C] Débutant - Tableau multidimensionnel

Oui mais les valeur sont en dur dans la stack.

Grosso modo la tu ne peux pas changer tes valeurs dynamiquement dans la memoire, tu ne pourras donc pas faire de traitement ou autre.

Le plus simple c'est de voir comment marche les pointeurs, ensuite tu vois la fonction malloc smile

La fonction malloc te permet de t'allouer de la memoire supprementaire smile

Comme cela tu ne depasse pas l'espace qui t'es allouer et donc pas de segmentation fault smile

Si tu veux une explication poste a la suite smile

voila un petit exo pour te familiariser avec les double tableau, char **

ton programe prend en parametre une chaine de caractere et tu dois la decouper par mot et stocker chaque mot dans un "etage" de ton tableau.

example

$> ./exo "Bonjour tout le monde je powned les tableau."

tu auras en sortie.

Bonjour'\n'
tout'\n'
le'\n'
monde'\n'
je,\n'
...'\n'


'\n' = retour a la ligne smile

voila si tu as des questions ou des pb poste ton code big_smile

Hors ligne

#7 Le 24/05/2008, à 11:54

Link31

Re : [C] Débutant - Tableau multidimensionnel

Hmm... le C est un langage simple, trop simple justement. C'est désolant de constater que des choses aussi utiles que des tableaux dynamiques multidimensionnels soient aussi compliquées à réaliser en C.

En C, prenons un simple (!) exemple de manipulation d'un tel tableau :

int **ptr1;
int size = 5;
int **tbl = (int**)malloc(size*sizeof(int*));
for (ptr = tbl; ptr < tbl+size;) *ptr++ = 0;
tbl[1] = (int*)malloc(3*sizeof(int));
tbl[1][2] = 42;
tbl[3] = (int*)malloc(22*sizeof(int));
tbl[3][21] = tbl[1][2];
for (ptr = tbl; ptr < tbl+size; ++ptr)
	if (*ptr) free(*ptr);
free(tbl);

En C++, on aurait juste eu à utiliser quelque chose comme :

vector< vector<int> > tbl;
tbl.resize(5);
tbl[1].resize(3);
tbl[1][2] = 42;
tbl[3].resize(22);
tbl[3][21] = tbl[1][2];

Ou avec .at() pour gérer les dépassements de tableau.

Enfin, bon courage tout de même avec le C !

Hors ligne

#8 Le 24/05/2008, à 14:53

Marabout

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :

Hmm... le C est un langage simple, trop simple justement. C'est désolant de constater que des choses aussi utiles que des tableaux dynamiques multidimensionnels soient aussi compliquées à réaliser en C.

En C, prenons un simple (!) exemple de manipulation d'un tel tableau :

int **ptr1;
int size = 5;
int **tbl = (int**)malloc(size*sizeof(int*));
for (ptr = tbl; ptr < tbl+size;) *ptr++ = 0;
tbl[1] = (int*)malloc(3*sizeof(int));
tbl[1][2] = 42;
tbl[3] = (int*)malloc(22*sizeof(int));
tbl[3][21] = tbl[1][2];
for (ptr = tbl; ptr < tbl+size; ++ptr)
	if (*ptr) free(*ptr);
free(tbl);

En C++, on aurait juste eu à utiliser quelque chose comme :

vector< vector<int> > tbl;
tbl.resize(5);
tbl[1].resize(3);
tbl[1][2] = 42;
tbl[3].resize(22);
tbl[3][21] = tbl[1][2];

Ou avec .at() pour gérer les dépassements de tableau.

Enfin, bon courage tout de même avec le C !

Juste pour pinailler : en C le cast de la valeur de retour d'un malloc est inutile et même déconseillé.

Hors ligne

#9 Le 24/05/2008, à 15:14

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :

Hmm... le C est un langage simple, trop simple justement. C'est désolant de constater que des choses aussi utiles que des tableaux dynamiques multidimensionnels soient aussi compliquées à réaliser en C.

En C, prenons un simple (!) exemple de manipulation d'un tel tableau :

int **ptr1;
int size = 5;
int **tbl = (int**)malloc(size*sizeof(int*));
for (ptr = tbl; ptr < tbl+size;) *ptr++ = 0;
tbl[1] = (int*)malloc(3*sizeof(int));
tbl[1][2] = 42;
tbl[3] = (int*)malloc(22*sizeof(int));
tbl[3][21] = tbl[1][2];
for (ptr = tbl; ptr < tbl+size; ++ptr)
	if (*ptr) free(*ptr);
free(tbl);

En C++, on aurait juste eu à utiliser quelque chose comme :

vector< vector<int> > tbl;
tbl.resize(5);
tbl[1].resize(3);
tbl[1][2] = 42;
tbl[3].resize(22);
tbl[3][21] = tbl[1][2];

Ou avec .at() pour gérer les dépassements de tableau.

Enfin, bon courage tout de même avec le C !

Ton code ne compile pas :

newmain.c:9: erreur: «ptr» undeclared (first use in this function)
newmain.c:9: erreur: (Each undeclared identifier is reported only once
newmain.c:9: erreur: for each function it appears in.)
newmain.c:6: attention : unused variable «ptr1»

de plus il y a des absurdités, comme quoi le C n'est pas si simple :
1ère absurdité : caster le retour de malloc
2 : la taille précisée pour le malloc n'est pas générique
3 : initialisation de pointeur avec 0
4 : utiliser if (*ptr) au lieu de if (*ptr != NULL)
5 : tester la nullité d'un pointeur avant de faire un free (free est blindé contre les pointeurs NULL et est souvent une fonction inlinée ) mais ce point reste discutable.
6 : tu ne testes pas le retour de malloc
7 : ne pas remettre un pointeur à NULL après l'avoir libérer

je propose :

#include <malloc.h>
#define SIZE 5U

int main (void)
{
   int **tbl = malloc (SIZE * sizeof *tbl);

   if (tbl != NULL)
   {
      for (size_t i = 0; i < SIZE; i++)
      { 
         tbl[i] = NULL;
      }

      tbl[1] = malloc (3 * sizeof *tbl[1]);
      if (tbl[1] != NULL)
      {
         tbl[1][2] = 42;

         tbl[3] = malloc (22 * sizeof *tbl[3]);
         if (tbl[3] != NULL)
         {
            tbl[3][21] = tbl[1][2];
         }
      }

      for (size_t i = 0; i < SIZE; i++)
      {
          free (tbl[i]), tbl[i] = NULL;
      }

      free (tbl), tbl = NULL;
   }
}

Hors ligne

#10 Le 24/05/2008, à 16:43

Link31

Re : [C] Débutant - Tableau multidimensionnel

Allez, encore un qui veut faire son intéressant roll

nicolas.sitbon a écrit :

Ton code ne compile pas

Bah oui, j'ai oublié de changer le nom d'une variable avant de poster, et alors ? Ce n'est pas le sujet.

nicolas.sitbon a écrit :

1ère absurdité : caster le retour de malloc

Je développe en C++, donc quand je code en C je caste mes malloc(). Inutile d'écrire bêtement du code incompatible juste pour faire le malin. D'autant plus que ça le pose pas de problème particulier (oui j'inclus stdlib.h).

nicolas.sitbon a écrit :

2 : la taille précisée pour le malloc n'est pas générique

Ça ce n'est pas mon problème, c'est le compilateur qui s'en occupe (sizeof()).

nicolas.sitbon a écrit :

3 : initialisation de pointeur avec 0

Cf. plus haut.

nicolas.sitbon a écrit :

4 : utiliser if (*ptr) au lieu de if (*ptr != NULL)

Trouve moi un exemple ou un if (*ptr) est faux avec un *ptr = 0 juste au dessus et on en reparlera.

nicolas.sitbon a écrit :

5 : tester la nullité d'un pointeur avant de faire un free (free est blindé contre les pointeurs NULL et est souvent une fonction inlinée ) mais ce point reste discutable.

C'est ça oui, mon code est trop rapide, alors on va le ralentir en rajoutant des tests inutiles roll

nicolas.sitbon a écrit :

6 : tu ne testes pas le retour de malloc

De toute façon, sous Linux, l'oom killer est appelé bien avant que malloc() ne renvoie NULL.
Et c'est un exemple de code, pas un cours magistral.

nicolas.sitbon a écrit :

7 : ne pas remettre un pointeur à NULL après l'avoir libérer

Je sais gérer mes pointeurs, merci. Une assignation de plus dépense des cycles CPU pour rien. Si le code est bon, cette "précaution" est inutile.

Comme quoi, il y a une différence entre ceux qui codent, et ceux qui traînent sur les forums pour donner des leçons.

Hors ligne

#11 Le 24/05/2008, à 17:14

rniamo

Re : [C] Débutant - Tableau multidimensionnel

la cast du malloc est courant ... et enseigné (même 'il est déconseillé)...


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#12 Le 24/05/2008, à 18:01

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :

Allez, encore un qui veut faire son intéressant roll

nicolas.sitbon a écrit :

Ton code ne compile pas

Bah oui, j'ai oublié de changer le nom d'une variable avant de poster, et alors ? Ce n'est pas le sujet.

bas si tu donnes un exemple à un débutant (parce que c'est de ça qu'il est question) et qu'il n'est pas bon, ça ne va pas le faire.


Link31 a écrit :
nicolas.sitbon a écrit :

1ère absurdité : caster le retour de malloc

Je développe en C++, donc quand je code en C je caste mes malloc(). Inutile d'écrire bêtement du code incompatible juste pour faire le malin. D'autant plus que ça le pose pas de problème particulier (oui j'inclus stdlib.h).

Rien à voir avec stdlib.h, le C et le C++ sont 2 langages différents. Ce n'est pas une question de compatibilité c'est une question de bonne pratique, une chose que tu ne maîtrises pas apparemment. Plus y a de ligne de code, plus y a de risque de bug, c'est pourtant bien connu.


Link31 a écrit :
nicolas.sitbon a écrit :

2 : la taille précisée pour le malloc n'est pas générique

Ça ce n'est pas mon problème, c'est le compilateur qui s'en occupe (sizeof()).

rien à voir avec le compilateur, si tu changes le type de ton tableau, tu es obligé de reporter la modif dans le malloc, à bas la généricité, très mauvaises pratiques.

Link31 a écrit :
nicolas.sitbon a écrit :

3 : initialisation de pointeur avec 0

Cf. plus haut.

pas portable et pas standard.


Link31 a écrit :
nicolas.sitbon a écrit :

4 : utiliser if (*ptr) au lieu de if (*ptr != NULL)

Trouve moi un exemple ou un if (*ptr) est faux avec un *ptr = 0 juste au dessus et on en reparlera.

tu as du mal à comprendre, c'est une bonne pratique. Ouvre un bon bouquin un de ces quatres.

Link31 a écrit :
nicolas.sitbon a écrit :

5 : tester la nullité d'un pointeur avant de faire un free (free est blindé contre les pointeurs NULL et est souvent une fonction inlinée ) mais ce point reste discutable.

C'est ça oui, mon code est trop rapide, alors on va le ralentir en rajoutant des tests inutiles roll

bien c'est ce que tu fais, tu rajoutes des tests inutiles, plus y a de lignes de code, plus il y a des risques de bug, c'est bien connu...

Link31 a écrit :
nicolas.sitbon a écrit :

6 : tu ne testes pas le retour de malloc

De toute façon, sous Linux, l'oom killer est appelé bien avant que malloc() ne renvoie NULL.
Et c'est un exemple de code, pas un cours magistral.

justement ton code ressemble à celui d'un cours magistral de fac; rien à voir avec linux encore une fois, la c'est du bon sens (SIGSEGV en vue).

Link31 a écrit :
nicolas.sitbon a écrit :

7 : ne pas remettre un pointeur à NULL après l'avoir libérer

Je sais gérer mes pointeurs, merci. Une assignation de plus dépense des cycles CPU pour rien. Si le code est bon, cette "précaution" est inutile.

Tu n'as pas du faire de développement pointu, si sur un code comme celui la, ça peut paraître inutile, sur un code de centaines de milliers de lignes c'est obligatoire (à moins de préféré utiliser valgrind pendant des heures)encore une bonne pratique à prendre.

Link31 a écrit :

Comme quoi, il y a une différence entre ceux qui codent, et ceux qui traînent sur les forums pour donner des leçons.

je te le fais pas dire...

Dernière modification par nicolas.sitbon (Le 29/05/2008, à 15:21)

Hors ligne

#13 Le 24/05/2008, à 22:50

Link31

Re : [C] Débutant - Tableau multidimensionnel

nicolas.sitbon a écrit :

Tu n'as pas du faire de développement pointu

J'attends toujours que tu me montres tes "réalisations" si pointues... big_smile
http://forum.ubuntu-fr.org/viewtopic.php?id=217503

Surtout que dès qu'on commence à parler de vrais projets à grande échelle, il vaut mieux oublier le C. Donc je te conseille d'arrêter de dire n'importe quoi à propos des erreurs de segmentation et de passer à un vrai langage (non-préhistorique), de même que je le conseillais à l'OP.

Dernière modification par Link31 (Le 24/05/2008, à 22:51)

Hors ligne

#14 Le 24/05/2008, à 23:05

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :
nicolas.sitbon a écrit :

Tu n'as pas du faire de développement pointu

J'attends toujours que tu me montres tes "réalisations" si pointues... big_smile
http://forum.ubuntu-fr.org/viewtopic.php?id=217503

Surtout que dès qu'on commence à parler de vrais projets à grande échelle, il vaut mieux oublier le C. Donc je te conseille d'arrêter de dire n'importe quoi à propos des erreurs de segmentation et de passer à un vrai langage (non-préhistorique), de même que je le conseillais à l'OP.

Le lien que tu proposes ne fait référence qu'à d'autres bêtises que tu as pu dire.
Si tu considères que l'écriture d'un OS n'est pas un projet à grande échelle alors je ne sais pas ce qu'il te faut...
Bref la façon dont tu considère le langage montre la connaissance que tu en as et ton argumentation ne tiens pas la route.

Hors ligne

#15 Le 24/05/2008, à 23:34

Link31

Re : [C] Débutant - Tableau multidimensionnel

Le kernel est codé avec la plus extrême attention, et il utilise un tas de moyens pour isoler chaque partie du code des autres : modularité des drivers, Makefiles conditionnels, ifdefs, et même de la programmation orientée objet avec des interfaces stockées dans des sections personnalisées du code objet.

Je veux bien admettre que le C soit un des langages les plus adaptés pour coder un kernel (bien qu'on puisse en coder un en pur C++, j'en sais quelque chose). Mais je ne pense pas que tous les projets aient autant de développeurs et autant de temps à consacrer pour écrire toute l'infrastructure de support nécessaire.

Le Java, le C++... permettent de gérer des grands projets bien plus facilement (à la portée de quelques développeurs), sans se soucier de problèmes aussi terre-à-terre que des malloc() ou des erreurs de segmentation. Et dans le cas du C++, avec des performances égales voire supérieures à du code C équivalent.

Donc sors ton nez de tes bouquins de C, ils sont dépassés, à moins que tu ne te passionnes pour les cultures de la préhistoire (mais ça ne fait pas un programmeur).
Désolé reedlou si j'occupe ton topic, je veux juste voir jusqu'où il va s'accrocher et s'enfoncer. Je sais, c'est pas bien de faire enrager les gens comme ça... mais celui-là est une cible si prévisible :P

Dernière modification par Link31 (Le 24/05/2008, à 23:39)

Hors ligne

#16 Le 24/05/2008, à 23:53

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :

Le kernel est codé avec la plus extrême attention, et il utilise un tas de moyens pour isoler chaque partie du code des autres : modularité des drivers, Makefiles conditionnels, ifdefs, et même de la programmation orientée objet avec des interfaces stockées dans des sections personnalisées du code objet.

ce que tu décrit là, est la façon normale de programmer en C...

Link31 a écrit :

Je veux bien admettre que le C soit un des langages les plus adaptés pour coder un kernel (bien qu'on puisse en coder un en pur C++, j'en sais quelque chose). Mais je ne pense pas que tous les projets aient autant de développeurs et autant de temps à consacrer pour écrire toute l'infrastructure de support nécessaire.

oui bien sûr, on a vu ce que ça donne un kernel codé en C++, pas le droit aux fonctions virtuelles et pas mal d'autres choses, bref pas du C++ quoi.

Link31 a écrit :

Le Java, le C++... permettent de gérer des grands projets bien plus facilement (à la portée de quelques développeurs), sans se soucier de problèmes aussi terre-à-terre que des malloc() ou des erreurs de segmentation. Et dans le cas du C++, avec des performances égales voire supérieures à du code C équivalent.

les problèmes que tu cites ici sont inhérent à ta manière de programmer, faut pas s'étonner quand on voit ta manière de programmer en C.

Link31 a écrit :

Donc sors ton nez de tes bouquins de C, ils sont dépassés, à moins que tu ne te passionnes pour les cultures de la préhistoire (mais ça ne fait pas un programmeur).
Désolé reedlou si j'occupe ton topic, je veux juste voir jusqu'où il va s'accrocher et s'enfoncer. Je sais, c'est pas bien de faire enrager les gens comme ça... mais celui-là est une cible si prévisible :P

des bouquins dépassés? oui bien sûr, la dernière version de la norme date de septembre 2007, ce qui n'est pas le cas du C++ (meme si on atteint la future version pour bientôt ).

Dernière modification par nicolas.sitbon (Le 24/05/2008, à 23:54)

Hors ligne

#17 Le 24/05/2008, à 23:55

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

Link31 a écrit :

Désolé reedlou si j'occupe ton topic, je veux juste voir jusqu'où il va s'accrocher et s'enfoncer. Je sais, c'est pas bien de faire enrager les gens comme ça... mais celui-là est une cible si prévisible :P

Mais tu as quel âge?

Hors ligne

#18 Le 25/05/2008, à 00:16

Link31

Re : [C] Débutant - Tableau multidimensionnel

Allez, calme toi et tout ira mieux.

Et si, on peut utiliser les fonctions virtuelles (et virtuelles pures) dans un kernel en C++. Il ne manque que les exceptions, et le RTTI (ainsi que la STL évidemment, même si on peut en intégrer/recoder une partie).
Plus d'infos ici : http://www.osdev.org/wiki/C_PlusPlus

Dernière modification par Link31 (Le 25/05/2008, à 00:17)

Hors ligne

#19 Le 25/05/2008, à 00:22

nicolas.sitbon

Re : [C] Débutant - Tableau multidimensionnel

mouais, mais de toute façon rien que pour embarquer le runtime, on y perd forcément en performance, les langages objets ne sont pas des langages naturels pour un processeur contrairement au C. Il ya aussi le prjet de Microsoft qui développe un kernel en C# mais là encore, on aura forcément des performances encore plus faible.

Hors ligne

#20 Le 25/05/2008, à 03:54

Marabout

Re : [C] Débutant - Tableau multidimensionnel

Et toi, ô vénérable Link31, qui es-tu, qu'as-tu fait pour te permettre d'affirmer que tu es, je cite:

l'une des dernières personnes sur ce forum susceptible de se voir donner des leçons de C/C++

Dernière modification par Marabout (Le 25/05/2008, à 03:54)

Hors ligne

#21 Le 25/05/2008, à 18:42

Link31

Re : [C] Débutant - Tableau multidimensionnel

Marabout a écrit :

Et toi, ô vénérable Link31, qui es-tu, qu'as-tu fait pour te permettre d'affirmer que tu es, je cite:

l'une des dernières personnes sur ce forum susceptible de se voir donner des leçons de C/C++

Un développeur expérimenté. Il n'y en a pas beaucoup sur ce forum.

Hors ligne

#22 Le 25/05/2008, à 21:58

telliam

Re : [C] Débutant - Tableau multidimensionnel

En tout cas ça ne manque pas de prétentieux wink

Pour info Link31, je bosse sur un projet en C et C++ avec plusieurs développeurs répartis dans différents pays et l'utilisation du C n'a jamais été un problème.

Sinon vous vous enflammez bcp pour des tableaux dynamiques wink


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#23 Le 25/05/2008, à 22:39

qqun

Re : [C] Débutant - Tableau multidimensionnel

Un développeur expérimenté. Il n'y en a pas beaucoup sur ce forum.

oula , c 'est un peu fort la ! meme si je dois reconnaitre que tu es un des contributeurs actifs de ce forums ,ce jugement me semble hatif !
 

Sinon vous vous enflammez bcp pour des tableaux dynamiques wink

+1

#24 Le 26/05/2008, à 01:40

Link31

Re : [C] Débutant - Tableau multidimensionnel

Bah oui, il n'y en a pas beaucoup ici, c'est un fait. Déjà parce qu'il y a énormément d'utilisateurs, donc une grande proportion de non-programmeurs. Ensuite parce qu'Ubuntu se veut facile d'accès, donc attire en premier lieu les novices en informatique.

Par exemple, par-rapport au forum Gentoo, la différence est flagrante.

[/fin du HS (relatif) dans ce topic]

Hors ligne