30

Je viens de lire l'article. Il est bien, mais bah, c'est du déjà vu, non ?
D'ailleurs, PHP est une belle abstraction étant donné que ses fonctions sont codées en C (donc typé et tout). Non ?
Tu connais beaucoup de langages qui ne dépendent pas du C ?

31

Test : >)

[EDIT : y a un bug, là ...]
avatar
I'm on a boat motherfucker, don't you ever forget

32

spectras :
Je viens de lire l'article. Il est bien, mais bah, c'est du déjà vu, non ?
D'ailleurs, PHP est une belle abstraction étant donné que ses fonctions sont codées en C (donc typé et tout). Non ?
Tu connais beaucoup de langages qui ne dépendent pas du C ?

Caml ? Même si la distribution la plus courante commence par une compilation C, on doit pouvoir bootstraper en ne distribuant qu'un binaire à la base ...

Pollux> Bah c'est clair que perl est moche, mais PHP n'a pas ce problème :]
avatar
I'm on a boat motherfucker, don't you ever forget

33

Moumou :
Pollux> Bah c'est clair que perl est moche, mais PHP n'a pas ce problème :]

troll spotted happy

Franchement, la lib standard de PHP est on ne peut plus bordélique couic

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

34

troll pawa happy
Franchement, la lib standard de PHP est vachement propre top
avatar
I'm on a boat motherfucker, don't you ever forget

35

Non, mais ça veut dire que l'abstraction "j'écris une chaîne de caractère avec mon texte entre guillemets" ne peut pas avoir lieu... Il faut des règles plus subtiles -- il faut comprendre les règles de combinaison char*/string ...
Bah oui puisque c'est des choses différentes.
Alors là c'est complètement orthogonal, si "Hello" est défini comme étant un std::string, le compilo peut très bien être autorisé à en faire directement un char * sans passer par un string intermédiaire... (il y a déjà des trucs de ce genre en C++, avec MyClass x=y; qui est optimisable par le compilo en MyClass x(y)
Tention, c'est pas une optimisation. La notation Classe truc=machin est un appel au constructeur par recopie, forcément (enfin, s'ils sont de type compatible, évidemment).
D'ailleurs, cette syntaxe est déconseillée, parce que justement elle ne montre pas l'appel au contructeur par recopie alors qu'il a lieu. D'ailleurs la syntaxe "(string)"Hello"" est aussi déconseillée, pour la même raison.
Pk est-ce que "Hello" n'initialiserait pas un objet de type string aussi ? Je vois pas le pb
Ben justement, pour la cohérence. Il vaut mieux qu'il n'existe qu'une seule façon de créer un objet. Surtout si 42 ne crée pas un objet pour représenter un entier.
Ca c'est un pb de Java, le C# peut promouvoir les types entiers en objets automatiquement.
J'ai pas choisi le Java complètement au pif trivil. Et puis je ne désire pas spécialement connaître le c#, mais ça c'est un autre problème.
Transtypage auto pawa
Hum, j'ai des réserves à faire : le transtypage auto, c'est...auto justement, ce qui veut dire que à moins d'en connaitre les règles exactes, tu est incapable de savoir ce que tu fais.
(je vois mal un autre langage faire ça aussi efficacement)
%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
Bah en perl t'as plus impresionnant, t'as le fameux#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2
happy

36

Le modèle OSI:
Niveau 7	Couche application      assure l'interface avec les applications
Niveau 6	Couche présentation     définit le format des données (leur représentation, éventuellement leur compression et leur cryptage)
Niveau 5	Couche session          définit l'ouverture des sessions sur les machines du réseau
Niveau 4	Couche Transport        elle est chargée du transport des données et de la gestion des erreurs
Niveau 3	Couche Réseau           permet de gérer les adresses et le routage des données
Niveau 2	Couche Liaison          définit l'interface avec la carte réseau
Niveau 1	Couche Physique         définit la façon dont les données sont converties en signaux numériques

en gros dans le cas le plus courant on as:
N1 -> carte réseau
N2 -> protocole Ethernet
N3 -> protocole IP
N4 -> protocole TCP
N5 -> session (Windows NT par exemple)
N6 -> un protocole comme HTTP, FTP,IRC etc...
N7 -> un Firefox/IE,mIRC etc...
Mais il y a des configuration particulières qui n'ont rien a voir pourtant elles respècent preque toutes ces modèles de couche ce qui permet de faire des corespondance.

En dessous de TCP ca fuit presque pas car bien codifié et respectant bien le modèle OSI. Session ca va encore a peu près malgré de très très légère incohérence dans la facon qu'a Windows de géner les domaines. au dela avec tous les protocole qui sont adapté n'importe comment (IE tient la première place car c'est le plus utilisé mais ce n'est malheureusement pas le seul) ca fuit je dirait même qu'il y a une plus grosse voie d'eau que dans le Titanic
avatar

37

spectras
:
Non, mais ça veut dire que l'abstraction "j'écris une chaîne de caractère avec mon texte entre guillemets" ne peut pas avoir lieu... Il faut des règles plus subtiles -- il faut comprendre les règles de combinaison char*/string ...
Bah oui puisque c'est des choses différentes.

Bah oui, mais c ridicule de devoir penser qu'on fait un char* dans un langage de haut niveau... Evidemment, c gênant que pour un débutant, mais tjs est-il que ce serait plus propre avec un vrai type chaîne.
Alors là c'est complètement orthogonal, si "Hello" est défini comme étant un std::string, le compilo peut très bien être autorisé à en faire directement un char * sans passer par un string intermédiaire... (il y a déjà des trucs de ce genre en C++, avec MyClass x=y; qui est optimisable par le compilo en MyClass x(y)
Tention, c'est pas une optimisation. La notation Classe truc=machin est un appel au constructeur par recopie, forcément (enfin, s'ils sont de type compatible, évidemment).

Euh nan, c facultatif.
D'ailleurs, cette syntaxe est déconseillée, parce que justement elle ne montre pas l'appel au contructeur par recopie alors qu'il a lieu.

Et si x a été déclaré plus haut ? roll
D'ailleurs la syntaxe "(string)"Hello"" est aussi déconseillée, pour la même raison.

Euh, n'importe quoi. Les casts (implicites ou non) font toute la puissance du C++, ce serait ridicule de s'en priver. Ca ne masque rien du tout, oui en C++ on peut appeler des constructeurs sans avoir à écrire "this is a constructor call" 42 fois, et alors ?
Pk est-ce que "Hello" n'initialiserait pas un objet de type string aussi ? Je vois pas le pb
Ben justement, pour la cohérence. Il vaut mieux qu'il n'existe qu'une seule façon de créer un objet.

Ben c con pour toi, parce qu'à ce moment-là le C++ n'est pas cohérent tongue Et je trouve ça ridicule, parce qu'avec un appel de fonction tu peux aussi initialiser un objet, avec une conversion implicite, etc... Où est le pb ?
Surtout si 42 ne crée pas un objet pour représenter un entier.

- en C++, ça n'a à peu près aucun sens de distinguer objet/pas objet, sauf d'un point de vue bas niveau spécifique à un compilateur donné (mais un compilo bien fait peut parfaitement considérer class Foo{int x;} et int comme équivalents); du point de vue sémantique, tous les types sont des types "valeurs", donc c'est parfaitement logique
- en C#, il y a une distinction objet/pas objet par le fait que c'est une référence/une valeur, mais c'est exactement du même ordre que la distinction entier/pointeur en C -- et "42" est un pointeur en C, alors que 42 est un entier.
Transtypage auto pawa
Hum, j'ai des réserves à faire : le transtypage auto, c'est...auto justement, ce qui veut dire que à moins d'en connaitre les règles exactes, tu est incapable de savoir ce que tu fais.

Comment ça ? Je crois que c un peu compliqué en C++, mais en C# c'est très simple, tu n'as droit qu'à une seule étape, donc tu risques pas d'avoir des trucs tordus avec des conversions intermédiaires.
Et franchement pour l'instant je n'ai jamais eu un seul bug à cause d'une conversion auto, donc ça reste à prouver, que "personne n'est capable de comprendre quoi que ce soit à du code avec une conversion auto". Du moment que tu "vois" le type de toutes tes variables (ce qui est de toute façon indispensable), tu ne risques rien, nan ?
(je vois mal un autre langage faire ça aussi efficacement)
Bah en perl t'as plus impresionnant

j'ai pas dit que ct impressionnant, g dit que ct pratique, ça n'a rien à voir et c même plutôt le contraire happy (et mon truc est tout sauf optimisé ou beau, hein)
',/((..)*)$/)
t'as le fameux#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*
happy

Ca fait quoi, la commande dc ? (je l'ai pas sur mon Cygwin)

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

38

Euh nan, c facultatif.
Voir la norme ansi, section 8.5, points 10 et 11 :
If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of the source type is the same class as, or a derived class of, the class of the destination, constructors are considered. The applicable constructors are enumerated (_over.match.ctor_), and the best one is chosen through overload resolution (_over.match_). The constructor so selected is called to initialize the object, with the initializer expression(s) as its argument(s).

Et si x a été déclaré plus haut ? roll
Si x a été déclaré plus haut, deux possibilités : soit c'est pas dans le même scope, auquel cas le nouveau le masque et n'a rien à voir, soit le compilateur te sors une erreur.
Euh, n'importe quoi. Les casts (implicites ou non) font toute la puissance du C++, ce serait ridicule de s'en priver.
La syntaxe type(valeur) est préférée pour les opérateurs de conversions, puisque ça montre l'appel à la fonction correspondante.
Et pour les pointeurs sur classe, en général un cast comme ça t'amène droit dans le mur. Faut utiliser static_cast<type>(valeur). Pour marquer la différence, on préfère donc reinterpret_cast<type>(valeur) à (type)valeur, pour les classes. Ca montre où on fait des conversions brutales.
Comment ça ? Je crois que c un peu compliqué en C++, mais en C# c'est très simple, tu n'as droit qu'à une seule étape, donc tu risques pas d'avoir des trucs tordus avec des conversions intermédiaires. Et franchement pour l'instant je n'ai jamais eu un seul bug à cause d'une conversion auto, donc ça reste à prouver, que "personne n'est capable de comprendre quoi que ce soit à du code avec une conversion auto". Du moment que tu "vois" le type de toutes tes variables (ce qui est de toute façon indispensable), tu ne risques rien, nan ?
Je pensais plus à des langages genre php. Je ne connais pas le C#.
j'ai pas dit que ct impressionnant, g dit que ct pratique, ça n'a rien à voir et c même plutôt le contraire (et mon truc est tout sauf optimisé ou beau, hein)
Ben le truc là n'est pas beau non plus. C'est un programme qui crypte le texte en entrée. On le trouve sur cette page web.
Ca fait quoi, la commande dc ? (je l'ai pas sur mon Cygwin)
C'est une calculatrice en ligne de commande et en polonaise inversée. Précision arbitraire.

39

spectras
:
Euh nan, c facultatif.
Voir la norme ansi, section 8.5, points 10 et 11 :
If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of the source type is the same class as, or a derived class of, the class of the destination, constructors are considered. The applicable constructors are enumerated (_over.match.ctor_), and the best one is chosen through overload resolution (_over.match_). The constructor so selected is called to initialize the object, with the initializer expression(s) as its argument(s).

Je faisais référence à ça :
|cite]Whenever a temporary class object is copied using a copy constructor, and this object and the copy have the same cvunqualified type, an implementation is permitted to treat the original and the copy as two different ways of referring to the same object and not perform a copy at all, even if the class copy constructor or
destructor have side effects. For a function with a class return type, if the expression in the return statement is the name of a local object, and the cvunqualified
type of the local object is the same as the function return type, an implementation is permitted to omit creating the temporary object to hold the function return
value, even if the class copy constructor or destructor has side effects. In these cases, the object is destroyed at the later of times when the original and the copy would have been destroyed without the optimization.[/cite]
Et si x a été déclaré plus haut ? roll
Si x a été déclaré plus haut, deux possibilités : soit c'est pas dans le même scope, auquel cas le nouveau le masque et n'a rien à voir, soit le compilateur te sors une erreur.

Euh nan je parlais pas d'une déclaration, je suis p-ê pas n00b à ce point-là triroll (et de toute façon, le nom n'importe pas dans ces cas-là)
Je parlais d'une affectation... (donc sans le MyClass) Tu ne vas qd même pas me dire qu'il ne faut jamais faire d'affectation en C++ parce que ça cache l'appel à un constructeur ? triroll
Euh, n'importe quoi. Les casts (implicites ou non) font toute la puissance du C++, ce serait ridicule de s'en priver.
La syntaxe type(valeur) est préférée pour les opérateurs de conversions, puisque ça montre l'appel à la fonction correspondante.

La syntaxe (type)valeur aussi ^^
Et pour les pointeurs sur classe, en général un cast comme ça t'amène droit dans le mur.

Mais je ne parle pas de pointeurs sur classe, je parle de classes tout court, là...
Comment ça ? Je crois que c un peu compliqué en C++, mais en C# c'est très simple, tu n'as droit qu'à une seule étape, donc tu risques pas d'avoir des trucs tordus avec des conversions intermédiaires. Et franchement pour l'instant je n'ai jamais eu un seul bug à cause d'une conversion auto, donc ça reste à prouver, que "personne n'est capable de comprendre quoi que ce soit à du code avec une conversion auto". Du moment que tu "vois" le type de toutes tes variables (ce qui est de toute façon indispensable), tu ne risques rien, nan ?
Je pensais plus à des langages genre php. Je ne connais pas le C#.

Euh je suis assez d'accord si tu parles de la dualité chaîne/nombre, parce que ça introduit silencieusement des nuances assez délicates. Mais avec le typage statique et des conversions implicites que qd c pas dangereux, y a vraiment aucun pb. Le typage des opérations sur les entiers est même bien plus sain en C# qu'en C/C++.
j'ai pas dit que ct impressionnant, g dit que ct pratique, ça n'a rien à voir et c même plutôt le contraire (et mon truc est tout sauf optimisé ou beau, hein)
Ben le truc là n'est pas beau non plus. C'est un programme qui crypte le texte en entrée. On le trouve sur cette page web.
Ca fait quoi, la commande dc ? (je l'ai pas sur mon Cygwin)
C'est une calculatrice en ligne de commande et en polonaise inversée. Précision arbitraire.

Ah OK, donc c dc qui fait tout, en fait sick

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

40

Pourquoi string("hello") et pas QString("hello")? smile Ça montre bien pourquoi ce n'est pas une bonne idée de faire de "hello" un objet d'une classe donnée, qui a dit que je veuille utiliser std::string pour stocker mes chaînes de caractères?
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

c bien ca le probleme, et le pire est qd on utilise 2 libs qui ont chacune leur format de string, le compilateur est tres souvent incapable de comprendre ce qu'il se passe et du coup le moindre petit programme fait 100 warnings gol
perso, du peu que que j'ai fait en C++, je prefererais un standard pour les strings, ca simplifierait la vie du codeur.
avatar
納 豆パワー!
I becamed a natto!!!1!one!

42

Je faisais référence à ça : [citation]
Bah oui, mais ça n'a rien à voir avec ton exemple "Classe truc = machin;", parce que dans ton exemple machin n'est pas un objet temporaire.
(il y a déjà des trucs de ce genre en C++, avec MyClass x=y; qui est optimisable par le compilo en MyClass x(y)
D'ailleurs, cette syntaxe est déconseillée, parce que justement elle ne montre pas l'appel au contructeur par recopie alors qu'il a lieu.
Et si x a été déclaré plus haut ? roll
Si x a été déclaré plus haut, deux possibilités : soit c'est pas dans le même scope, auquel cas le nouveau le masque et n'a rien à voir, soit le compilateur te sors une erreur.
Euh nan je parlais pas d'une déclaration, je suis p-ê pas n00b à ce point-là (et de toute façon, le nom n'importe pas dans ces cas-là) Je parlais d'une affectation... (donc sans le MyClass) Tu ne vas qd même pas me dire qu'il ne faut jamais faire d'affectation en C++ parce que ça cache l'appel à un constructeur ?
C'est aussi ce que je pensais, mais avoue que l'enchaînement des réponses prête à confusion. Et là l'affectation x=y ne fait pas d'appel au constructeur.
La syntaxe (type)valeur aussi
Bah c'est moins évident que ça va appeler la fonction valeur.type(), comme ça. Enfin bon, c'est une question de notation, évidemment quand tu connais tu le vois tout de suite, mais bon.
Euh je suis assez d'accord si tu parles de la dualité chaîne/nombre, parce que ça introduit silencieusement des nuances assez délicates. Mais avec le typage statique et des conversions implicites que qd c pas dangereux, y a vraiment aucun pb. Le typage des opérations sur les entiers est même bien plus sain en C# qu'en C/C++.
Oui. Reste juste aux débutants à apprendre quand c'est dangereur et quand ça ne l'est pas. C'est pas forcément toujours évident.
Ah OK, donc c dc qui fait tout, en fait sick
),$x):0,""/ge;($r,$t)=&amp;bdiv($r,256),$_=pack(C,$t).$_ while$w--+1-2*$d;print}
Ils en ont aussi une version que en perl, mais elle fait 5 lignes. Ca donne ça :#!/usr/local/bin/perl -s
do 'bigint.pl';($_,$n)=@ARGV;s/^.(..)*$/0$&amp;/;($k=unpack('B*',pack('H*',$_)))=~
s/^0*//;$x=0;$z=$n=~s/./$x=&amp;badd(&amp;bmul($x,16),hex$&amp;)/ge;while(read(STDIN,$_,$w
=((2*$d-1+$z)&amp;~1)/2)){$r=1;$_=substr($_."\0"x$w,$c=0,$w);s/.|\n/$c=&amp;badd(&amp;bmul
($c,256),ord$&amp;)/ge;$_=$k;s/./$r=&amp;bmod(&amp;bmul($r,$r),$x),$&amp;?$r=&amp;bmod(&amp;bmul($r,$c
Ca me fait un peu penser au IOCCC cheeky

43

spectras
:
Je faisais référence à ça : [citation]
Bah oui, mais ça n'a rien à voir avec ton exemple "Classe truc = machin;", parce que dans ton exemple machin n'est pas un objet temporaire.

Euh je voulais dire "machin = n'importe quoi", désolé...
C'est aussi ce que je pensais, mais avoue que l'enchaînement des réponses prête à confusion. Et là l'affectation x=y ne fait pas d'appel au constructeur.

Euh, si y n'est pas temporaire, ça détruit l'objet dans x et ça en construit un nouveau, nan ? confus
La syntaxe (type)valeur aussi
Bah c'est moins évident que ça va appeler la fonction valeur.type(), comme ça. Enfin bon, c'est une question de notation, évidemment quand tu connais tu le vois tout de suite, mais bon.

Bah c assez indispensable de connaître, oué ^^ Et ça simplifie tellement de choses...
Euh je suis assez d'accord si tu parles de la dualité chaîne/nombre, parce que ça introduit silencieusement des nuances assez délicates. Mais avec le typage statique et des conversions implicites que qd c pas dangereux, y a vraiment aucun pb. Le typage des opérations sur les entiers est même bien plus sain en C# qu'en C/C++.
Oui. Reste juste aux débutants à apprendre quand c'est dangereur et quand ça ne l'est pas. C'est pas forcément toujours évident.

Certes, mais bon le C++ ne s'apprend en 5 minutes non plus...
Ah OK, donc c dc qui fait tout, en fait sick
),$x):0,""/ge;($r,$t)=&amp;bdiv($r,256),$_=pack(C,$t).$_ while$w--+1-2*$d;print}
Ils en ont aussi une version que en perl, mais elle fait 5 lignes. Ca donne ça :#!/usr/local/bin/perl -s
do 'bigint.pl';($_,$n)=@ARGV;s/^.(..)*$/0$&amp;/;($k=unpack('B*',pack('H*',$_)))=~
s/^0*//;$x=0;$z=$n=~s/./$x=&amp;badd(&amp;bmul($x,16),hex$&amp;)/ge;while(read(STDIN,$_,$w
=((2*$d-1+$z)&amp;~1)/2)){$r=1;$_=substr($_."\0"x$w,$c=0,$w);s/.|\n/$c=&amp;badd(&amp;bmul
($c,256),ord$&amp;)/ge;$_=$k;s/./$r=&amp;bmod(&amp;bmul($r,$r),$x),$&amp;?$r=&amp;bmod(&amp;bmul($r,$c
Ca me fait un peu penser au IOCCC cheeky

Moué, ils grugent encore avec une lib couic Au moins les trucs en C n'utilisent pas une lib pour faire tout le boulot ^^

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

44

Euh je voulais dire "machin = n'importe quoi", désolé...
Ok.
Euh, si y n'est pas temporaire, ça détruit l'objet dans x et ça en construit un nouveau, nan ?
Nan, il appelle l'opérateur d'affectation.
Certes, mais bon le C++ ne s'apprend en 5 minutes non plus...
Tu m'étonnes. Ca fait 4 ans, et je découvre encore des trucs de temps en temps (sans compter que je ne me suis pas encore intéressé au fonctionnement des fonctors).

45

spectras
:
Euh, si y n'est pas temporaire, ça détruit l'objet dans x et ça en construit un nouveau, nan ?
Nan, il appelle l'opérateur d'affectation.

class MyClass {
  int *z;
  std::string x,y;
  MyClass(const MyClass& m): x(m.x),y(m.y) { z=new int(*m.z); }
  ~MyClass() { delete z; }
}

Je pense que le destructeur puis le constructeur seront appelés, non ? P-ê que l'opérateur d'affectation fait tout ça par défaut, mais c juste une question de vocabulaire : en pratique, il détruit l'objet et le reconstruit.

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

46

 " <<x.z <<" et y.z == " <<y.z <<endl;      y = x;            cout <<"done  x.z == " <<x.z <<" et y.z == " <<y.z <<endl; } Non, par défaut, si tu ne le redéfinis pas, l'opérateur d'affectation fait une copie bit à bit de la classe. Regarde, par exemple : #include <iostream> #include <string>  using namespace std; class MyClass { public:      int *z;      std::string x,y;      MyClass()      {           z = new int;           *z = 1;           cout <<"contructor " <<this <<endl;      }            MyClass(const MyClass& m): x(m.x),y(m.y)      {           z=new int(*m.z);           cout <<"copy contructor " <<this <<endl;      }            ~MyClass()      {           delete z;           cout <<"deleted " <<this <<endl;      } }; int main() {      MyClass x, y;      cout <<"go !  x.z ==[edit: je viens de m'apercevoir que j'ai oublié le return à la fin du main :/]
etherdream:~/prog> ./testtruc
contructor 0xbffffad0
contructor 0xbffffac4
go !  x.z == 0x804bdb0 et y.z == 0x804bdc0
done  x.z == 0x804bdb0 et y.z == 0x804bdb0
deleted 0xbffffac4
deleted 0xbffffad0
etherdream:~/prog>
Et encore, il arrive que le second destructeur plante (puisqu'il libère une zone déjà libérée).

C'est pour ça qu'il faut toujours redéfinir l'opérateur d'assignation (enfin sauf si la copie bit à bit est ce que tu veux faire). Et si tu veux l'interdire, ben faut quand même en définir un vide, mais private.

47

Ca alors eek
Effectivement, on en apprend ts les jours happy Je pensais que le truc par défaut faisait qqch de sensé...

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

48

Pour en revenir aux strings, je n'ai jamais compris pourquoi en Pascal on avait une abstraction correcte et efficace et pas en C... En pascal aussi, si on veut on peut faire une liste de caractères... on a donc les deux possibilités, dont une beaucoup plus proche de la logique humaine.
avatar

49

"Hello".[3] pawa happy

[EDIT : connerie de [nombre]]
avatar
I'm on a boat motherfucker, don't you ever forget

50

pour en revenir aux abstractions, ça me rappelle la fois où j'ai demandé à mon prof d'info si des manipulations de bases de données ne serait pas plus rapide en C pur, qu'avec MySQL par exemple.