"Arnaud Debaene" wrote in message news:425014d5$0$13224$
Vincent Burel wrote: > Alors Ce Qu'il Faut Démontrer : <snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer votre petite phrase vous pourriez avoir la politesse sinon la correction de répondre ou de contre-argumenter les 3 propositions que j'avais faites. Pour l'instant c'est votre intervention qui est ridicule, car elle n'ammène rien au débat. Allez ! Prouvez nous que vous pouvez produire autre chose qu'un médiocre mot de petit bouffon de cour de ferme.
VB
"Arnaud Debaene" <adebaene@club-internet.fr> wrote in message
news:425014d5$0$13224$626a14ce@news.free.fr...
Vincent Burel wrote:
> Alors Ce Qu'il Faut Démontrer :
<snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la
norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer votre
petite phrase vous pourriez avoir la politesse sinon la correction de
répondre ou de contre-argumenter les 3 propositions que j'avais faites. Pour
l'instant c'est votre intervention qui est ridicule, car elle n'ammène rien
au débat. Allez ! Prouvez nous que vous pouvez produire autre chose qu'un
médiocre mot de petit bouffon de cour de ferme.
"Arnaud Debaene" wrote in message news:425014d5$0$13224$
Vincent Burel wrote: > Alors Ce Qu'il Faut Démontrer : <snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer votre petite phrase vous pourriez avoir la politesse sinon la correction de répondre ou de contre-argumenter les 3 propositions que j'avais faites. Pour l'instant c'est votre intervention qui est ridicule, car elle n'ammène rien au débat. Allez ! Prouvez nous que vous pouvez produire autre chose qu'un médiocre mot de petit bouffon de cour de ferme.
VB
Vincent Burel
"Cyrille Szymanski" wrote in message news:424ffda7$0$12964$
On 2005-04-03, Vincent Burel wrote: >> char ch1[] = "bonjour"; >> char* ch2 = "bonjour"; >> > ok, y'a une distinction qui est fait par le compilo qui considère > implicitement ch2 comme un pointeur sur constante (ce qui n'est pas
normal,
> mais constitue une optimization d'espace j'imagine).
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend des compilo et des O/S, pas de la norme "C" !?
VB
"Cyrille Szymanski" <cns@cns2.invalid> wrote in message
news:424ffda7$0$12964$626a14ce@news.free.fr...
On 2005-04-03, Vincent Burel <vincent.burel@spam-wanadoo.fr> wrote:
>> char ch1[] = "bonjour";
>> char* ch2 = "bonjour";
>>
> ok, y'a une distinction qui est fait par le compilo qui considère
> implicitement ch2 comme un pointeur sur constante (ce qui n'est pas
normal,
> mais constitue une optimization d'espace j'imagine).
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est
modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend
des compilo et des O/S, pas de la norme "C" !?
"Cyrille Szymanski" wrote in message news:424ffda7$0$12964$
On 2005-04-03, Vincent Burel wrote: >> char ch1[] = "bonjour"; >> char* ch2 = "bonjour"; >> > ok, y'a une distinction qui est fait par le compilo qui considère > implicitement ch2 comme un pointeur sur constante (ce qui n'est pas
normal,
> mais constitue une optimization d'espace j'imagine).
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend des compilo et des O/S, pas de la norme "C" !?
VB
AMcD®
Vincent Burel wrote:
"AMcD®" wrote in message news:424fe42b$0$26374$
char ch1[] = "bonjour"; char* ch2 = "bonjour";
J'ai quand même du mal à te suivre. Pas de type tableau ? Un tableau est une structure de données constituée d'éléments du même type. Après, que le C te renvoie un pointeur dessus pour le manipuler, qu'est-ce que ça change ? En mémoire, t'as un tableau.
certainement, mais y'a des langage ou le tableau est un vrai type. que tu peux passer par copy à des fonctions, ou copier par affectation simple. En "C" le type tableau est particulier et ne correspond ni à une variable normale, ni exactement à un pointeur auto-alloué...
Certes
mais j'aime bien cette éternelle discussion, parce qu'elle fait perdre un temps fou et qu'elle rameute du monde :-) un vrai troll :-)
Malheureusement pour toi, sur ce coup, cela t'as surtout fait écrire quelques bêtises :-).
ceci dit la clef de voute de votre démonstration, a Toi et Mr Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
c'est de dire que l'équivalence pointeur-tableau est fausse car si l'on déclare char * ch2="bonjour"; alors on ne peut pas écrire dedans... contrairement à une déclaration de type char ch1[]="bonjour"; Dans le premier cas y'a déclaration implicite de constante, c'est une singularité qui ne remets pas en cause le fait que tu considère ton tableau comme un pointeur sur un espace mémoire indexable...
Dans un cas, c'est la chaîne qui est constante, dans l'autre, c'est le pointeur. C'est tout à fait différent. Si un tableau n'était pas possible en C, cela reviendrait à dire que tu ne peux pas adresser des variables de même type "regroupées" dans une même structure. Ce qui est faux.
d'un autre coté si tableau1[100] et tableau2[100] sont considérés comme deux variables tableaux, alors pourquoi ne peut on pas affecter un tableau à l'autre comme on le fait avec n'importe quelle autre type de variable !? tableau1=tableau2 ne copie pas le contenu du tableau2 and la variable tableau1... bizarre non !? :-)
Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il n'est donc pas possible de procéder comme si, justement, c'était un type. Il n'en reste pas moins qu'il est tout à fait possible d'organiser tes structures de données sous la forme de tableau. Un chaîne de caractère n'est rien d'autre qu'un tableau de caractères en mémoire. Simplement, pour manipuler ces tableaux, cela se fait par pointeur. D'un point de vue sécurité de programmation, cela autorise malheureusement de programmer un peu n'importe quoi et n'importe comment, mais, d'un autre côté, cela te laisse une grande liberté.
Cela dit, tu peux affecter des tableaux entre eux. Mais, nous sommes en C, donc, faut faire mumuse avec les pointeurs (insistons).
int t1[] = {1,3,5}; int t2[] = {2,4,6}; int* p1; int* p2;
p1 = t1; p2 = t2;
À partir d'ici, considère que tes tableaux ne sont pas t1 et t2, mais p1 et p2. C -> pointeurs :-). Eh ben :
p2 = p1;
qui affecte le tableau t1 à t2 ne pose aucun problème :-).
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
-- AMcD®
http://arnold.mcdonald.free.fr/
Vincent Burel wrote:
"AMcD®" <arnold.mcdonald@free.fr> wrote in message
news:424fe42b$0$26374$636a15ce@news.free.fr...
char ch1[] = "bonjour";
char* ch2 = "bonjour";
J'ai quand même du mal à te suivre. Pas de type tableau ? Un tableau
est une structure de données constituée d'éléments du même type.
Après, que le C te renvoie un pointeur dessus pour le manipuler,
qu'est-ce que ça change ? En mémoire, t'as un tableau.
certainement, mais y'a des langage ou le tableau est un vrai type.
que tu peux passer par copy à des fonctions, ou copier par
affectation simple. En "C" le type tableau est particulier et ne
correspond ni à une variable normale, ni exactement à un pointeur
auto-alloué...
Certes
mais j'aime bien cette éternelle discussion, parce
qu'elle fait perdre un temps fou et qu'elle rameute du monde :-) un
vrai troll :-)
Malheureusement pour toi, sur ce coup, cela t'as surtout fait écrire
quelques bêtises :-).
ceci dit la clef de voute de votre démonstration, a Toi et Mr
Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
c'est de dire que l'équivalence pointeur-tableau est fausse
car si l'on déclare char * ch2="bonjour"; alors on ne peut pas écrire
dedans... contrairement à une déclaration de type char
ch1[]="bonjour"; Dans le premier cas y'a déclaration implicite de
constante, c'est une singularité qui ne remets pas en cause le fait
que tu considère ton tableau comme un pointeur sur un espace mémoire
indexable...
Dans un cas, c'est la chaîne qui est constante, dans l'autre, c'est le
pointeur. C'est tout à fait différent. Si un tableau n'était pas possible en
C, cela reviendrait à dire que tu ne peux pas adresser des variables de même
type "regroupées" dans une même structure. Ce qui est faux.
d'un autre coté si tableau1[100] et tableau2[100] sont considérés
comme deux variables tableaux, alors pourquoi ne peut on pas affecter
un tableau à l'autre comme on le fait avec n'importe quelle autre
type de variable !? tableau1=tableau2 ne copie pas le contenu du
tableau2 and la variable tableau1... bizarre non !? :-)
Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il
n'est donc pas possible de procéder comme si, justement, c'était un type. Il
n'en reste pas moins qu'il est tout à fait possible d'organiser tes
structures de données sous la forme de tableau. Un chaîne de caractère n'est
rien d'autre qu'un tableau de caractères en mémoire. Simplement, pour
manipuler ces tableaux, cela se fait par pointeur. D'un point de vue
sécurité de programmation, cela autorise malheureusement de programmer un
peu n'importe quoi et n'importe comment, mais, d'un autre côté, cela te
laisse une grande liberté.
Cela dit, tu peux affecter des tableaux entre eux. Mais, nous sommes en C,
donc, faut faire mumuse avec les pointeurs (insistons).
int t1[] = {1,3,5};
int t2[] = {2,4,6};
int* p1;
int* p2;
p1 = t1;
p2 = t2;
À partir d'ici, considère que tes tableaux ne sont pas t1 et t2, mais p1 et
p2. C -> pointeurs :-). Eh ben :
p2 = p1;
qui affecte le tableau t1 à t2 ne pose aucun problème :-).
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
J'ai quand même du mal à te suivre. Pas de type tableau ? Un tableau est une structure de données constituée d'éléments du même type. Après, que le C te renvoie un pointeur dessus pour le manipuler, qu'est-ce que ça change ? En mémoire, t'as un tableau.
certainement, mais y'a des langage ou le tableau est un vrai type. que tu peux passer par copy à des fonctions, ou copier par affectation simple. En "C" le type tableau est particulier et ne correspond ni à une variable normale, ni exactement à un pointeur auto-alloué...
Certes
mais j'aime bien cette éternelle discussion, parce qu'elle fait perdre un temps fou et qu'elle rameute du monde :-) un vrai troll :-)
Malheureusement pour toi, sur ce coup, cela t'as surtout fait écrire quelques bêtises :-).
ceci dit la clef de voute de votre démonstration, a Toi et Mr Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
c'est de dire que l'équivalence pointeur-tableau est fausse car si l'on déclare char * ch2="bonjour"; alors on ne peut pas écrire dedans... contrairement à une déclaration de type char ch1[]="bonjour"; Dans le premier cas y'a déclaration implicite de constante, c'est une singularité qui ne remets pas en cause le fait que tu considère ton tableau comme un pointeur sur un espace mémoire indexable...
Dans un cas, c'est la chaîne qui est constante, dans l'autre, c'est le pointeur. C'est tout à fait différent. Si un tableau n'était pas possible en C, cela reviendrait à dire que tu ne peux pas adresser des variables de même type "regroupées" dans une même structure. Ce qui est faux.
d'un autre coté si tableau1[100] et tableau2[100] sont considérés comme deux variables tableaux, alors pourquoi ne peut on pas affecter un tableau à l'autre comme on le fait avec n'importe quelle autre type de variable !? tableau1=tableau2 ne copie pas le contenu du tableau2 and la variable tableau1... bizarre non !? :-)
Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il n'est donc pas possible de procéder comme si, justement, c'était un type. Il n'en reste pas moins qu'il est tout à fait possible d'organiser tes structures de données sous la forme de tableau. Un chaîne de caractère n'est rien d'autre qu'un tableau de caractères en mémoire. Simplement, pour manipuler ces tableaux, cela se fait par pointeur. D'un point de vue sécurité de programmation, cela autorise malheureusement de programmer un peu n'importe quoi et n'importe comment, mais, d'un autre côté, cela te laisse une grande liberté.
Cela dit, tu peux affecter des tableaux entre eux. Mais, nous sommes en C, donc, faut faire mumuse avec les pointeurs (insistons).
int t1[] = {1,3,5}; int t2[] = {2,4,6}; int* p1; int* p2;
p1 = t1; p2 = t2;
À partir d'ici, considère que tes tableaux ne sont pas t1 et t2, mais p1 et p2. C -> pointeurs :-). Eh ben :
p2 = p1;
qui affecte le tableau t1 à t2 ne pose aucun problème :-).
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
-- AMcD®
http://arnold.mcdonald.free.fr/
Pierre Maurette
Vincent Burel a écrit : [...]
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS. C'est l'objet "bonjour" qui est un const char*. Il initialise sans warner (ce serait peut-être mieux qu'il le fasse) un char*. Ce qui dépend du compilo, c'est la finesse de définition des zones mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou un seul, à priori R/W ? Il faut ensuite se poser la question de la non duplication des chaines égales. Quest-ce que ça devient si on peut les modifier. Il faut donc impérativement déclarer les chaines que l'on souhaite modifier (c'est parfois pratique) soit de façon dynamique, soit comme un vrai tableau. -- Pierre
Vincent Burel a écrit :
[...]
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est
modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend
des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS. C'est
l'objet "bonjour" qui est un const char*. Il initialise sans warner (ce
serait peut-être mieux qu'il le fasse) un char*.
Ce qui dépend du compilo, c'est la finesse de définition des zones
mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou
un seul, à priori R/W ?
Il faut ensuite se poser la question de la non duplication des chaines
égales. Quest-ce que ça devient si on peut les modifier. Il faut donc
impérativement déclarer les chaines que l'on souhaite modifier (c'est
parfois pratique) soit de façon dynamique, soit comme un vrai tableau.
--
Pierre
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS. C'est l'objet "bonjour" qui est un const char*. Il initialise sans warner (ce serait peut-être mieux qu'il le fasse) un char*. Ce qui dépend du compilo, c'est la finesse de définition des zones mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou un seul, à priori R/W ? Il faut ensuite se poser la question de la non duplication des chaines égales. Quest-ce que ça devient si on peut les modifier. Il faut donc impérativement déclarer les chaines que l'on souhaite modifier (c'est parfois pratique) soit de façon dynamique, soit comme un vrai tableau. -- Pierre
Vincent Burel
"AMcD®" wrote in message news:42503159$0$26393$
Vincent Burel wrote: > "AMcD®" wrote in message > news:424fe42b$0$26374$ >>>> char ch1[] = "bonjour"; >>>> char* ch2 = "bonjour"; > Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il n'est donc pas possible de procéder comme si, justement, c'était un type.
voila, on est d'accord, c'est exactement ce que j'ai dit.
Il n'en reste pas moins qu'il est tout à fait possible d'organiser tes structures de données sous la forme de tableau.
exacte, et j'ai même donner un exemple.
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
:-)
VB
"AMcD®" <arnold.mcdonald@free.fr> wrote in message
news:42503159$0$26393$636a15ce@news.free.fr...
Vincent Burel wrote:
> "AMcD®" <arnold.mcdonald@free.fr> wrote in message
> news:424fe42b$0$26374$636a15ce@news.free.fr...
>>>> char ch1[] = "bonjour";
>>>> char* ch2 = "bonjour";
>
Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il
n'est donc pas possible de procéder comme si, justement, c'était un type.
voila, on est d'accord, c'est exactement ce que j'ai dit.
Il n'en reste pas moins qu'il est tout à fait possible d'organiser tes
structures de données sous la forme de tableau.
exacte, et j'ai même donner un exemple.
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
Vincent Burel wrote: > "AMcD®" wrote in message > news:424fe42b$0$26374$ >>>> char ch1[] = "bonjour"; >>>> char* ch2 = "bonjour"; > Cela n'a rien à voir. Le C n'a pas de "type" tableau, c'est entendu, il n'est donc pas possible de procéder comme si, justement, c'était un type.
voila, on est d'accord, c'est exactement ce que j'ai dit.
Il n'en reste pas moins qu'il est tout à fait possible d'organiser tes structures de données sous la forme de tableau.
exacte, et j'ai même donner un exemple.
Non, sérieux, faut que tu révises un peu le C là (hîn ! hîn !).
:-)
VB
Arnaud Debaene
Vincent Burel wrote:
"Arnaud Debaene" wrote in message news:425014d5$0$13224$
Vincent Burel wrote:
Alors Ce Qu'il Faut Démontrer :
<snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer votre petite phrase vous pourriez avoir la politesse sinon la correction de répondre ou de contre-argumenter les 3 propositions que j'avais faites.
Norme C ISO/IEC 9899 (C99) : 6.2.5/20 : "An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type." Il y a 447 fois le mot "array" dans cette norme...
La norme C99 définit par ailleurs la notion de "variable-length array", autrement dit un tableau qui peut être redimendionné automatiquement selon les besoins.
Il y a certainement un grand lien entre tableau et pointeur en C, parce qu'un tableau est converti ("decay" en anglais) en pointeur dans de nombreux cas : ca n'empêche pas la notion de tableau d'exister en C.
Allez ! Prouvez nous que vous pouvez produire autre chose qu'un médiocre mot de petit bouffon de cour de ferme.
Cour de ferme? Pourquoi cour de ferme??
Arnaud
Vincent Burel wrote:
"Arnaud Debaene" <adebaene@club-internet.fr> wrote in message
news:425014d5$0$13224$626a14ce@news.free.fr...
Vincent Burel wrote:
Alors Ce Qu'il Faut Démontrer :
<snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la
norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer
votre petite phrase vous pourriez avoir la politesse sinon la
correction de répondre ou de contre-argumenter les 3 propositions que
j'avais faites.
Norme C ISO/IEC 9899 (C99) :
6.2.5/20 : "An array type describes a contiguously allocated nonempty set of
objects with a
particular member object type, called the element type."
Il y a 447 fois le mot "array" dans cette norme...
La norme C99 définit par ailleurs la notion de "variable-length array",
autrement dit un tableau qui peut être redimendionné automatiquement selon
les besoins.
Il y a certainement un grand lien entre tableau et pointeur en C, parce
qu'un tableau est converti ("decay" en anglais) en pointeur dans de nombreux
cas : ca n'empêche pas la notion de tableau d'exister en C.
Allez ! Prouvez nous que
vous pouvez produire autre chose qu'un médiocre mot de petit bouffon
de cour de ferme.
"Arnaud Debaene" wrote in message news:425014d5$0$13224$
Vincent Burel wrote:
Alors Ce Qu'il Faut Démontrer :
<snip>
Plutôt que de continuer à te ridiculiser, tu ferais mieux de lire la norme...
Regardez moi celui-ci comme il est suffisant ! :-) avant de lancer votre petite phrase vous pourriez avoir la politesse sinon la correction de répondre ou de contre-argumenter les 3 propositions que j'avais faites.
Norme C ISO/IEC 9899 (C99) : 6.2.5/20 : "An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type." Il y a 447 fois le mot "array" dans cette norme...
La norme C99 définit par ailleurs la notion de "variable-length array", autrement dit un tableau qui peut être redimendionné automatiquement selon les besoins.
Il y a certainement un grand lien entre tableau et pointeur en C, parce qu'un tableau est converti ("decay" en anglais) en pointeur dans de nombreux cas : ca n'empêche pas la notion de tableau d'exister en C.
Allez ! Prouvez nous que vous pouvez produire autre chose qu'un médiocre mot de petit bouffon de cour de ferme.
Cour de ferme? Pourquoi cour de ferme??
Arnaud
Vincent Burel
"Pierre Maurette" wrote in message news:42503428$0$11791$
Vincent Burel a écrit : [...] > donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca
dépend
> des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS.
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au données constantes avant même le linkage de l'executable.
Ce qui dépend du compilo, c'est la finesse de définition des zones mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou un seul, à priori R/W ?
ca dépends de la cible, si tu compile pour DOS ou en modèle FLAT, y'a pas de mémoire R ou W , c'est R et W.
Il faut ensuite se poser la question de la non duplication des chaines égales.
c'est une optimization de déclaration des constantes.
en fait la suite suivante
char sss[256]; long vi=4; sprintf(sss,"le nombre de part est %i", vi);
est équialente à
char * mask="le nombre de part est %i"; char sss[256]; long vi=4; sprintf(sss,mask, vi);
dans les deux cas le compilo déclare ces chaines dans l'espace mémoire des constantes
Quest-ce que ça devient si on peut les modifier. Il faut donc impérativement déclarer les chaines que l'on souhaite modifier (c'est parfois pratique) soit de façon dynamique, soit comme un vrai tableau.
on dirait oui ...
VB
"Pierre Maurette" <maurettepierre@wanadoo.fr> wrote in message
news:42503428$0$11791$626a14ce@news.free.fr...
Vincent Burel a écrit :
[...]
> donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca
dépend
> des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS.
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si
ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au
données constantes avant même le linkage de l'executable.
Ce qui dépend du compilo, c'est la finesse de définition des zones
mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou
un seul, à priori R/W ?
ca dépends de la cible, si tu compile pour DOS ou en modèle FLAT, y'a pas de
mémoire R ou W , c'est R et W.
Il faut ensuite se poser la question de la non duplication des chaines
égales.
c'est une optimization de déclaration des constantes.
en fait la suite suivante
char sss[256];
long vi=4;
sprintf(sss,"le nombre de part est %i", vi);
est équialente à
char * mask="le nombre de part est %i";
char sss[256];
long vi=4;
sprintf(sss,mask, vi);
dans les deux cas le compilo déclare ces chaines dans l'espace mémoire des
constantes
Quest-ce que ça devient si on peut les modifier. Il faut donc
impérativement déclarer les chaines que l'on souhaite modifier (c'est
parfois pratique) soit de façon dynamique, soit comme un vrai tableau.
"Pierre Maurette" wrote in message news:42503428$0$11791$
Vincent Burel a écrit : [...] > donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca
dépend
> des compilo et des O/S, pas de la norme "C" !?
Je ne penses pas que la validité de la chose dépende de l'OS.
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au données constantes avant même le linkage de l'executable.
Ce qui dépend du compilo, c'est la finesse de définition des zones mémoire. Y a-t-il deux segments de données initialisées (R/W et RO) ou un seul, à priori R/W ?
ca dépends de la cible, si tu compile pour DOS ou en modèle FLAT, y'a pas de mémoire R ou W , c'est R et W.
Il faut ensuite se poser la question de la non duplication des chaines égales.
c'est une optimization de déclaration des constantes.
en fait la suite suivante
char sss[256]; long vi=4; sprintf(sss,"le nombre de part est %i", vi);
est équialente à
char * mask="le nombre de part est %i"; char sss[256]; long vi=4; sprintf(sss,mask, vi);
dans les deux cas le compilo déclare ces chaines dans l'espace mémoire des constantes
Quest-ce que ça devient si on peut les modifier. Il faut donc impérativement déclarer les chaines que l'on souhaite modifier (c'est parfois pratique) soit de façon dynamique, soit comme un vrai tableau.
on dirait oui ...
VB
Pierre Maurette
AMcD® a écrit : [...]
ceci dit la clef de voute de votre démonstration, a Toi et Mr Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
Je suis ravi que nous soyons ainsi réunis ;-) Je précise un truc dans ce thread qui se trollise: je ne suis pas un fanatique de la norme, en ce sens que je comprends très bien que quelqu'un travaille dans un contexte (char 8bits par exemple). Mais là, ça dépasse le pinaillage de norme. Je teste un truc avec le compilo un peu ancien Borland, ça marche, je prends des habitudes, je poste un code faux et j'ai l'air con (pas grave). Je regarde à ce moment là la FAQ, c'est clair, c'est pas bon. Sous gcc 3.2, ça pète. Sous Linux, gcc 3.4, ça pète (donc, > 90% du code Linux je suppose). Sous VC7.1 (Windows of course, XP en l'occurence), ça pète. En bref, ça pète sous quelques compilos merginaux ;-), mais ça marche sous Borland.
J'ajoute pour info que "array" est défini comme un type au paragraphe 6.2.5.20 de C99. Un type dérivé, exactement comme une structure, une union, une fonction, un pointeur. Mais que le tableau soit un type en C est une évidence qui ne mérite pas vraiment de développements. Que ce soit un type merdique dont on aurait parfois envie de se passer, je veux bien l'admettre.
-- Pierre
AMcD® a écrit :
[...]
ceci dit la clef de voute de votre démonstration, a Toi et Mr
Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
Je suis ravi que nous soyons ainsi réunis ;-)
Je précise un truc dans ce thread qui se trollise: je ne suis pas un
fanatique de la norme, en ce sens que je comprends très bien que
quelqu'un travaille dans un contexte (char 8bits par exemple). Mais là,
ça dépasse le pinaillage de norme.
Je teste un truc avec le compilo un peu ancien Borland, ça marche, je
prends des habitudes, je poste un code faux et j'ai l'air con (pas
grave). Je regarde à ce moment là la FAQ, c'est clair, c'est pas bon.
Sous gcc 3.2, ça pète. Sous Linux, gcc 3.4, ça pète (donc, > 90% du code
Linux je suppose). Sous VC7.1 (Windows of course, XP en l'occurence),
ça pète. En bref, ça pète sous quelques compilos merginaux ;-), mais ça
marche sous Borland.
J'ajoute pour info que "array" est défini comme un type au paragraphe
6.2.5.20 de C99. Un type dérivé, exactement comme une structure, une
union, une fonction, un pointeur. Mais que le tableau soit un type en C
est une évidence qui ne mérite pas vraiment de développements. Que ce
soit un type merdique dont on aurait parfois envie de se passer, je veux
bien l'admettre.
ceci dit la clef de voute de votre démonstration, a Toi et Mr Maurette,
Ce n'est pas une démonstation, c'est tout simplement la norme du C !
Je suis ravi que nous soyons ainsi réunis ;-) Je précise un truc dans ce thread qui se trollise: je ne suis pas un fanatique de la norme, en ce sens que je comprends très bien que quelqu'un travaille dans un contexte (char 8bits par exemple). Mais là, ça dépasse le pinaillage de norme. Je teste un truc avec le compilo un peu ancien Borland, ça marche, je prends des habitudes, je poste un code faux et j'ai l'air con (pas grave). Je regarde à ce moment là la FAQ, c'est clair, c'est pas bon. Sous gcc 3.2, ça pète. Sous Linux, gcc 3.4, ça pète (donc, > 90% du code Linux je suppose). Sous VC7.1 (Windows of course, XP en l'occurence), ça pète. En bref, ça pète sous quelques compilos merginaux ;-), mais ça marche sous Borland.
J'ajoute pour info que "array" est défini comme un type au paragraphe 6.2.5.20 de C99. Un type dérivé, exactement comme une structure, une union, une fonction, un pointeur. Mais que le tableau soit un type en C est une évidence qui ne mérite pas vraiment de développements. Que ce soit un type merdique dont on aurait parfois envie de se passer, je veux bien l'admettre.
-- Pierre
Pierre Maurette
Vincent Burel a écrit : [...]
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au données constantes avant même le linkage de l'executable.
Non. Puisque l'exemple que je vous ai donné concernait deux compilos (Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.
-- Pierre
Vincent Burel a écrit :
[...]
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si
ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au
données constantes avant même le linkage de l'executable.
Non. Puisque l'exemple que je vous ai donné concernait deux compilos
(Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.
ha ben si ca plante à l'exécution, y'a pas de secret, ca dépend de l'OS, si ca dépendait du compilo il donnerai une erreur sur la ligne qui accède au données constantes avant même le linkage de l'executable.
Non. Puisque l'exemple que je vous ai donné concernait deux compilos (Borland bcc 5.6 et gcc 3.2) sous le même OS et même le même IDE.
-- Pierre
Cyrille Szymanski
On 2005-04-03, Vincent Burel wrote:
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend des compilo et des O/S, pas de la norme "C" !?
La norme ISO (et K&R) elle dit "si tu fais ça, tu t'exposes à voir ta copine te plaquer".
Cela dit, on peut disserter pendant des heures sur les effets de bord d'un truc non supporté, la conclusion reste la même : c'est pas à utiliser.
-- Cyrille Szymanski
On 2005-04-03, Vincent Burel <vincent.burel@spam-wanadoo.fr> wrote:
Non non, c'est explicité dans la norme ça. La norme garantit que ch1 est
modifiable, mais ne dit rien sur ch2.
donc en fait, ch2 peut pointer sur un espace modifiable ou non, ca dépend
des compilo et des O/S, pas de la norme "C" !?
La norme ISO (et K&R) elle dit "si tu fais ça, tu t'exposes à voir ta copine te
plaquer".
Cela dit, on peut disserter pendant des heures sur les effets de bord d'un truc
non supporté, la conclusion reste la même : c'est pas à utiliser.