Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Dans l'article <bh88lc$f7l$,
Antoine Leca écrit:Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Dans l'article <bh88lc$f7l$1@shakotay.alphanet.ch>,
Antoine Leca <root@localhost.gov> écrit:
Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Dans l'article <bh88lc$f7l$,
Antoine Leca écrit:Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Laurent Deniau écrivit:Antoine Leca wrote:Laurent Deniau écrivit:Abstract Data Type. Un objet dont l'utilisateur n'a absoluement rien
a savoir hormis les fonctions qui lui sont applicables (interface).
Ah. Quelque chose comme
struct adt;
Non.
Cela t'ennuierais de me (nous ?) dire pourquoi ?
typedef struct elem array[];
typedef struct list_elem list;
^^^^^^^^^Ce n'est pas du tout ce que je veux.
Hmmm.
Tu émets un besoin. J'essaye de formuler une solution
qui y répond, à mon sens. Si c'est pas ce que tu veux,
c'est que je n'ai compris le besoin (merci de reformuler).
Mais si ce que tu veux, c'est ta solution et rien d'autre,
même si c'est minimalement différent, le dialogue va
être difficile.
Si tu y tiens,
typedef struct elem object;
Mais cela n'apporte rien, àmha.
Si.
Deuxième excuses-moi: En quoi ?
Pour etre plus clair, voici un code qui montre le probleme:
<couic>/* pas de warnings avec ce cas
struct adt;
typedef struct adt *list;
^^^^^typedef struct adt *array;
C'est sûr que si tu changes ma proposition, elle ne va
pas te convenir...
Pour moi, une liste (avec les sens conventionels),
c'est un objet complexe, donc implémenté par une
structure ad-hoc, et sûrement pas par un pointeur
(à la rigueur deux).
Laurent Deniau écrivit:
Antoine Leca wrote:
Laurent Deniau écrivit:
Abstract Data Type. Un objet dont l'utilisateur n'a absoluement rien
a savoir hormis les fonctions qui lui sont applicables (interface).
Ah. Quelque chose comme
struct adt;
Non.
Cela t'ennuierais de me (nous ?) dire pourquoi ?
typedef struct elem array[];
typedef struct list_elem list;
^^^^^^^^^
Ce n'est pas du tout ce que je veux.
Hmmm.
Tu émets un besoin. J'essaye de formuler une solution
qui y répond, à mon sens. Si c'est pas ce que tu veux,
c'est que je n'ai compris le besoin (merci de reformuler).
Mais si ce que tu veux, c'est ta solution et rien d'autre,
même si c'est minimalement différent, le dialogue va
être difficile.
Si tu y tiens,
typedef struct elem object;
Mais cela n'apporte rien, àmha.
Si.
Deuxième excuses-moi: En quoi ?
Pour etre plus clair, voici un code qui montre le probleme:
<couic>
/* pas de warnings avec ce cas
struct adt;
typedef struct adt *list;
^^^^^
typedef struct adt *array;
C'est sûr que si tu changes ma proposition, elle ne va
pas te convenir...
Pour moi, une liste (avec les sens conventionels),
c'est un objet complexe, donc implémenté par une
structure ad-hoc, et sûrement pas par un pointeur
(à la rigueur deux).
Laurent Deniau écrivit:Antoine Leca wrote:Laurent Deniau écrivit:Abstract Data Type. Un objet dont l'utilisateur n'a absoluement rien
a savoir hormis les fonctions qui lui sont applicables (interface).
Ah. Quelque chose comme
struct adt;
Non.
Cela t'ennuierais de me (nous ?) dire pourquoi ?
typedef struct elem array[];
typedef struct list_elem list;
^^^^^^^^^Ce n'est pas du tout ce que je veux.
Hmmm.
Tu émets un besoin. J'essaye de formuler une solution
qui y répond, à mon sens. Si c'est pas ce que tu veux,
c'est que je n'ai compris le besoin (merci de reformuler).
Mais si ce que tu veux, c'est ta solution et rien d'autre,
même si c'est minimalement différent, le dialogue va
être difficile.
Si tu y tiens,
typedef struct elem object;
Mais cela n'apporte rien, àmha.
Si.
Deuxième excuses-moi: En quoi ?
Pour etre plus clair, voici un code qui montre le probleme:
<couic>/* pas de warnings avec ce cas
struct adt;
typedef struct adt *list;
^^^^^typedef struct adt *array;
C'est sûr que si tu changes ma proposition, elle ne va
pas te convenir...
Pour moi, une liste (avec les sens conventionels),
c'est un objet complexe, donc implémenté par une
structure ad-hoc, et sûrement pas par un pointeur
(à la rigueur deux).
Gabriel Dos Reis écrivit:"Antoine Leca" writes:void *my_memcpy(void* a, const void* b, int c).{ return
memcpy(a,b,c); }
non, pas ças -- il est notoire que memcpy sur certaines
implémentations sont très lentes.
Mmmm... C'est memmove() qui craint, pas memcpy().
memcpy() doit même exister dans V7, ou pas loin.Je n'ai pas dit que je voulais implémenter la bibliothèque standard C.
Qui as dit que tu voulais le faire ?
Je te réponds simplement que pour faire les opérations identiques
à ce qui est dans la bibliothèque standard, il suffit d'utiliser la
dite bibliothèque. Et que memcpy() et qsort() ne sont pas des
exceptions (et maintenant, on ajoutera que memmove() peut
éventuellement en être une).
D'autre part, j'explique à ceux qui voudraient bien nous faire
l'honneur de nous lire, que la bibliothèque C ne doit pas
obligatoirement etc. Parce que je pense que notre échange
pourrait enduire d'erreur certains. Je me préoccupe de
pédagogie, je me chauffe pour septembre, quoi...
Gabriel Dos Reis écrivit:
"Antoine Leca" <root@localhost.gov> writes:
void *my_memcpy(void* a, const void* b, int c).{ return
memcpy(a,b,c); }
non, pas ças -- il est notoire que memcpy sur certaines
implémentations sont très lentes.
Mmmm... C'est memmove() qui craint, pas memcpy().
memcpy() doit même exister dans V7, ou pas loin.
Je n'ai pas dit que je voulais implémenter la bibliothèque standard C.
Qui as dit que tu voulais le faire ?
Je te réponds simplement que pour faire les opérations identiques
à ce qui est dans la bibliothèque standard, il suffit d'utiliser la
dite bibliothèque. Et que memcpy() et qsort() ne sont pas des
exceptions (et maintenant, on ajoutera que memmove() peut
éventuellement en être une).
D'autre part, j'explique à ceux qui voudraient bien nous faire
l'honneur de nous lire, que la bibliothèque C ne doit pas
obligatoirement etc. Parce que je pense que notre échange
pourrait enduire d'erreur certains. Je me préoccupe de
pédagogie, je me chauffe pour septembre, quoi...
Gabriel Dos Reis écrivit:"Antoine Leca" writes:void *my_memcpy(void* a, const void* b, int c).{ return
memcpy(a,b,c); }
non, pas ças -- il est notoire que memcpy sur certaines
implémentations sont très lentes.
Mmmm... C'est memmove() qui craint, pas memcpy().
memcpy() doit même exister dans V7, ou pas loin.Je n'ai pas dit que je voulais implémenter la bibliothèque standard C.
Qui as dit que tu voulais le faire ?
Je te réponds simplement que pour faire les opérations identiques
à ce qui est dans la bibliothèque standard, il suffit d'utiliser la
dite bibliothèque. Et que memcpy() et qsort() ne sont pas des
exceptions (et maintenant, on ajoutera que memmove() peut
éventuellement en être une).
D'autre part, j'explique à ceux qui voudraient bien nous faire
l'honneur de nous lire, que la bibliothèque C ne doit pas
obligatoirement etc. Parce que je pense que notre échange
pourrait enduire d'erreur certains. Je me préoccupe de
pédagogie, je me chauffe pour septembre, quoi...
Vincent Lefevre <vincent+ writes:
| Dans l'article ,
| Gabriel Dos Reis écrit:
|
| > mouais, mais alors le même argument s'applique pour la conversion
| > implicite void* -> T* pour n'importe quel T, type d'objet. Cette
| > conversion implicite est beaucoup plus pernicieuse que l'arithmétique.
|
| Pourquoi? Le programmeur n'est-il pas censé connaître son langage et
| programmer en conséquence?
Oui et alors ? Tu n'as jamais fait d'erreur ?
Vincent Lefevre <vincent+news@vinc17.org> writes:
| Dans l'article <m3n0eg1h7f.fsf@uniton.integrable-solutions.net>,
| Gabriel Dos Reis <gdr@integrable-solutions.net> écrit:
|
| > mouais, mais alors le même argument s'applique pour la conversion
| > implicite void* -> T* pour n'importe quel T, type d'objet. Cette
| > conversion implicite est beaucoup plus pernicieuse que l'arithmétique.
|
| Pourquoi? Le programmeur n'est-il pas censé connaître son langage et
| programmer en conséquence?
Oui et alors ? Tu n'as jamais fait d'erreur ?
Vincent Lefevre <vincent+ writes:
| Dans l'article ,
| Gabriel Dos Reis écrit:
|
| > mouais, mais alors le même argument s'applique pour la conversion
| > implicite void* -> T* pour n'importe quel T, type d'objet. Cette
| > conversion implicite est beaucoup plus pernicieuse que l'arithmétique.
|
| Pourquoi? Le programmeur n'est-il pas censé connaître son langage et
| programmer en conséquence?
Oui et alors ? Tu n'as jamais fait d'erreur ?
Vincent Lefevre <vincent+ writes:
| Dans l'article ,
| Gabriel Dos Reis écrit:
|
| > Moi, je garderais char et virerais les deux autres avatards.
|
| Mais un char qui aurait quelles fonctionnalités?
représenter un charactère.
Vincent Lefevre <vincent+news@vinc17.org> writes:
| Dans l'article <m3bruw1gbo.fsf@uniton.integrable-solutions.net>,
| Gabriel Dos Reis <gdr@integrable-solutions.net> écrit:
|
| > Moi, je garderais char et virerais les deux autres avatards.
|
| Mais un char qui aurait quelles fonctionnalités?
représenter un charactère.
Vincent Lefevre <vincent+ writes:
| Dans l'article ,
| Gabriel Dos Reis écrit:
|
| > Moi, je garderais char et virerais les deux autres avatards.
|
| Mais un char qui aurait quelles fonctionnalités?
représenter un charactère.
Vincent Lefevre écrivit:Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Je ne lis pas comme toi (mais là, c'est de l'interprétation
libre): pour moi, le « même objet » n'implique pas identité,
et encore moins compatibilité, de type. Cela fait seulement
référence au "object" du 3.15, laquelle notion signifie
globalement que cela a été alloué en une seule fois.
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Pour moi, je ne vois pas de difficultés (dans le cas précis
des types caractères), grâce à ce que dit 6.2.6.1.
Dans l'article <bh88lc$f7l$,
Antoine Leca écrit:Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Si si. 3p1, 3e phrase. Et ISO 2382 est du même tonneau.
Vincent Lefevre écrivit:
Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Je ne lis pas comme toi (mais là, c'est de l'interprétation
libre): pour moi, le « même objet » n'implique pas identité,
et encore moins compatibilité, de type. Cela fait seulement
référence au "object" du 3.15, laquelle notion signifie
globalement que cela a été alloué en une seule fois.
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Pour moi, je ne vois pas de difficultés (dans le cas précis
des types caractères), grâce à ce que dit 6.2.6.1.
Dans l'article <bh88lc$f7l$1@shakotay.alphanet.ch>,
Antoine Leca <root@localhost.gov> écrit:
Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Si si. 3p1, 3e phrase. Et ISO 2382 est du même tonneau.
Vincent Lefevre écrivit:Il n'y a pas que la contrainte de 6.5.6. Dans 6.5.6#9, le
comportement n'est défini que dans ce cas:
[#9] When two pointers are subtracted, both shall point to
elements of the same array object, or one past the last
element of the array object;
Je ne lis pas comme toi (mais là, c'est de l'interprétation
libre): pour moi, le « même objet » n'implique pas identité,
et encore moins compatibilité, de type. Cela fait seulement
référence au "object" du 3.15, laquelle notion signifie
globalement que cela a été alloué en une seule fois.
Il faudrait alors que la norme dise ce qui se passe dans le cas de
tableaux différents. Par exemple, lorsque les éléments ont la même
taille (et le même alignement).
Pour moi, je ne vois pas de difficultés (dans le cas précis
des types caractères), grâce à ce que dit 6.2.6.1.
Dans l'article <bh88lc$f7l$,
Antoine Leca écrit:Dans ce cas, tu ne "peux plus" renvoyer 0, il "faut" renvoyer la
valeur logique et naturelle, sur laquelle il n'y a pas ce me semble
d'ambiguité, même dans le cas des architectures tordues
Mais la norme ne parle pas de logique et de naturel.
Si si. 3p1, 3e phrase. Et ISO 2382 est du même tonneau.