Non-Lvalue Arrays May Have Subscripts
Bonjour,
Tout d'abord je tiens à m'excuser par avance si la question a déjà été posée. J'ai cherché sur le forum avec quelques mots clés qui me sont passés par la tête mais je n'ai pas trouvé de réponse. Désolé si j'ai mal cherché...
Dans le manuel de gcc 4.3.2, il est fait mention de "non-lvalue arrays". Je ne me suis pas mis au C99, mais il me semble que l'expression ne figure pas dans le standard. En tout cas, dans le K&R2, si j'ai bonne mémoire, il y a une ligne qui dit quelque chose du genre: "Arrays are not lvalues." Donc, je trouve l'expression utilisée dans le manuel de gcc vraiment bizarre...
Ce que je ne saisis pas trop bien non plus, c'est le paragraphe "5.19 Non-Lvalue Arrays May Have Subscripts". Je ne vois pas pourquoi le code présenté - dans le manuel de gcc - n'est pas valide en C89.
Code:
1 2 3 4 5 6 7
| struct foo {int a[4];};
struct foo f();
bar (int index)
{
return f().a[index];
} |
J'ai testé sous Borland 5.5 et ça compile correctement. Je suis conscient que cela ne signifie pas que c'est conforme à la norme, ce pourrait être une extension du compilateur ou bien juste une non conformité à la norme.
Vos explications sont les bienvenues. Merci d'avance,
Stephane