[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux-team] OT? initializing of automatic aggregate



At 10:48 AM 3/7/00 +0100, you wrote:
Eric Darchis wrote:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main()
> {
> char brol[10] = "Hello";
> printf("%s\n", brol);
> return 0;
> }
>
> Ce bout de code compile au poil sous Linux, sous AIX, pareil. Seulement sur
> un Pyramid (SVR4), j'obtiens un warning "Initializing of automatic aggregate".
>

> Donc, qqn peut-il m'expliquer ce qu'est un "automatic aggregate" ?
> Pourquoi ca pose probleme sur ce systeme ?

Pour moi ca doit etre le "hello"
Non ?!? Sans blague.
Bien sur que c'est le = "hello" mais aux dernieres nouvelles ce n'est rien d'illegal.


essaye un equivalent de "gcc -S" et regarde le code genere !
Bonne idee. Ceci confirme ma theorie. Dans le cas d'une variable locale a la fonction, on doit empiler la valeur, donc il faut du code. La plupart des compilateurs generent le code sans raler mais pas le mien. (ce n'est qu'un warning, il fait le code quand meme)

Maintenant que je sais ce que c'est, je peux ignorer le warning en toute confiance.


char *p="Hello";
char q[10];

y a t-il aussi un warning ?
Si non, c'est donc le "=" qui pose probleme, et l'agregat serait le
p[10] !
L'aggregat, c'est l'initialisation de q[10].
Ceci dit, attention a (char *p="Hello") !!! C'est correct si vous ne touchez pas a Hello. p est un pointeur, donc 4 bytes dans le segment Data qui pointent vers les 6 bytes de Hello\0 DANS LE SEGMENT DE CODE !! Or le segment de code c'est READ-ONLY !
Donc:
int main()
{
char *p="ABC";
p[0]='C'; /* sur certains systemes: BOUM */
}

Eric.


---------
Visit the Linux Supertore Online: http://www.redcorp.com !
If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.
Archive of the list: http://tania.be.linux.org/