OVH Cloud OVH Cloud

De la pertinence d'une phrase

67 réponses
Avatar
Yoxoman
"La valeur d'un tableau est un pointeur vers son premier élément".
(valeur dans le sens rvalue. D'ailleurs ce mot peut-il avoir un autre
sens ?)

On entend souvent des formulations plus ou moins diverses et compliquées
sur cette conversion tableau-pointeur, ce qui fait qu'on a du mal à s'y
retrouver.
On parle par exemple du nom du tableau (alors que si p pointe vers un
tableau, il me semble que *p est également concerné par cette
conversion), ou d'exception sur certains opérateur (& et sizeof, ce qui
n'est pas faux, mais dont la cause semble être le fait que derrière ces
opérateurs, une lvalue n'est pas convertie en rvalue).

Ma question est simple : cette phrase est-elle vraie ?

--
"Yo!"
Martin Heidegger (trad. Terrence Malick)

7 réponses

3 4 5 6 7
Avatar
Pierre Maurette
Marc Boyer wrote:


1 n'existe tout simplement pas.


La preuve, nous n'en parlons pas ;-)


C'est clair, 1 n'a pas d'adresse, peut-être qu'il habite chez une
copine, je ne sais pas...
Mais tant que je ne l'aurais pas vu devant moi, je douterai de son
existence, la facilité que nous avons à abstraire nous fait croire à
l'existence d'une réalité sous-jacente, mais aussi loin que nous
puissions creuser nous ne pouvons trouver de soubassement à cette
impression, 1 (et tout ce qui s'ensuit) ne peut être affublé d'une
existence intrinsèque que parce que nous la lui accordons, or cela veut
justement dire que cette existence ne lui est pas intrinsèque.

That's all in the mind, you know ?
Les 1 existent, leur plus grand roi fut Attila.


Sinon, c'est bon, ce que vous fumez ?

--
Pierre Maurette



Avatar
Harpo
Pierre Maurette wrote:

Les 1 existent, leur plus grand roi fut Attila.


Attila est là, donc il existe.


Sinon, c'est bon, ce que vous fumez ?


T'en veux... ?

Il y a 30 ans il est vrai que je ne crachais pas sur le chichon, c'était
le bon vieux temps, on écrivait des programmes en assembleur, la vie
était vraiment belle, j'étais jeune et beau (maintenant je ne suis plus
que beau).
Il semble que tu sois un programmeur assembleur, ce n'est pas une vue
restrictive au contraire, je suis basiquement un programmeur assembleur
IBM 360, en se dépéchant un peu on doit pouvoir en trouver de bon
modèles aux puces à St Ouen.

Voilà ce que j'ai a te proposer, tu as de très grands talents
d'écrivain, donc je fourni le sujet, tu écris le livre et on partage
les bénéfices !

Tope là !

Avatar
Antoine Leca
En news:442d652b$0$17553$,
Emmanuel Delahaye va escriure:
En news:, Yoxoman va escriure:
Aurais-tu un exemple d'identificateurs différents d'un même objet ?


/* toto.c */
extern int tab[64];

/* tutu.c */
extern int tab[64];


En quoi les identificateurs sont-ils différents ?


Qui parlait de portes ouvertes ?

Ils ne sont pas dans la même unité de traduction, donc ils sont aussi
différents qu'on peut l'être, du point de vue du compilateur : pas dans la
même portée, pas du même type (et non, le int d'une unité n'est pas le même
que le int de l'autre !), et cætera.

Seul l'orthographe du symbole leur est commune (mais c'est justement cela
qui importe pour l'éditeur de liens).


static int tab[64];

int f() {
extern int tab[64];
/*...*/
}


ditto...


Compare avec

static int tab[64];

int f() {
auto float tab[12];
/*...*/
{
extern int tab[64];
/*...*/
}
}

... et là cela ne « marche » plus.

En fait, c'est que le second tab de 64 entiers _cache_ le premier
identificateur, mais les règles (C99 6.2.2p4) disent que dans ce cas-là
(utilisation de extern), il est lié avec l'entité déclarée précédement,
quand c'est possible.
Et il n'est pas possible de se lier à un objet auto.


Antoine



Avatar
Harpo
Antoine Leca wrote:

Aurais-tu un exemple d'identificateurs différents d'un même objet ?


/* toto.c */
extern int tab[64];

/* tutu.c */
extern int tab[64];


En quoi les identificateurs sont-ils différents ?


Qui parlait de portes ouvertes ?

Ils ne sont pas dans la même unité de traduction, donc ils sont aussi
différents qu'on peut l'être, du point de vue du compilateur : pas
dans la même portée, pas du même type (et non, le int d'une unité
n'est pas le même que le int de l'autre !),


Je ne comprends pas...
Même compilé pour une même arch sur la même arch ?

et cætera.

Seul l'orthographe du symbole leur est commune (mais c'est justement
cela qui importe pour l'éditeur de liens).


Cela n'a donc pas de rapport avec le langage C ! :-)

--
http://patrick.davalan.free.fr/




Avatar
Emmanuel Delahaye
Aurais-tu un exemple d'identificateurs différents d'un même objet ?
/* toto.c */

extern int tab[64];

/* tutu.c */
extern int tab[64];
En quoi les identificateurs sont-ils différents ?



Qui parlait de portes ouvertes ?

Ils ne sont pas dans la même unité de traduction, donc ils sont aussi
différents qu'on peut l'être, du point de vue du compilateur : pas dans la
même portée, pas du même type (et non, le int d'une unité n'est pas le même
que le int de l'autre !), et cætera.

Seul l'orthographe du symbole leur est commune (mais c'est justement cela
qui importe pour l'éditeur de liens).


Je vois ce que tu veux dire. Ils appartiennent à 2 tables de symboles
distinctes (celle de chacune des unité de compilation). Elle pourraient
effectivement être compilées (en 68000, par exemple) avec des options
différentes sur les int (16-bit vs 32-bit, ce qui mettrait une belle
pagaille dans le code final !).

Ça méritait une explication qui est loin de l'enfoncement de porte ouverte.

--
A+

Emmanuel Delahaye




Avatar
Antoine Leca
En news:4431420e$0$19707$, Harpo va escriure:
Antoine Leca wrote:

/* toto.c */
extern int tab[64];

/* tutu.c */
extern int tab[64];


En quoi les identificateurs sont-ils différents ?


Ils ne sont pas dans la même unité de traduction, donc ils sont aussi
différents qu'on peut l'être, du point de vue du compilateur : pas
dans la même portée, pas du même type (et non, le int d'une unité
n'est pas le même que le int de l'autre !),


Je ne comprends pas...
Même compilé pour une même arch sur la même arch ?


Je grossis le trait (au-delà du raisonnable) : si j'insère un
#define int double
deux lignes avant dans tutu.c, c'est pareil ?

En fait, quand le compilateur (au sens strict, l'analyseur syntaxique et
sémantique) rencontre chacune des deux lignes, il effectue le même
traitment, mais sur des données (table des symboles, en particulier)
parfaitement distinctes. En conséquence, pour le compilateur les deux
identificateurs sont aussi différents que si l'orthographe en était
différente.

C'est seulement au moment de l'édition des liens qu'il va faire le
rapprochement. Bien plus tard, donc.


Seul l'orthographe du symbole leur est commune (mais c'est justement
cela qui importe pour l'éditeur de liens).


Cela n'a donc pas de rapport avec le langage C ! :-)


L'édition des liens est le nom couramment donné à la phase 8 du processus de
traduction.


Antoine




Avatar
Stephane Legras-Decussy
"Pierre Maurette" a écrit dans le message de
news:
Les 1 existent, leur plus grand roi fut Attila.


Beware of the Huns in the sun.

proverbe connu chez les rosbifs.

3 4 5 6 7