static promenne v codevisionu

Miroslav Šinko sinkomiro@gmail.com
Čtvrtek Březen 5 14:43:47 CET 2009


Z Vasho povodneho mailu:

>>To ale nenamena, ze po starte programu bude mat premenna definovanu hodnotu.

Norma DEFINUJE, ze ak staticka premenna nie je explicitne
inicializovana, bude nastavena na 0.
" -- if it has arithmetic type, it is initialized to (positive or
unsigned) zero;"

Teda toto Vase tvrdenie nie je pravda. Rozsirenia kompilatora norma
nedefinuje, ked komipaltor umoznuje _no_init_ a uzivatel to pouzije,
mal by vediet, co robi. V povodnej otazke ale nic take nebolo.


miro


2009/3/5 admin.mtech <admin.mtech@gmail.com>:
> Prosim Vas, a co nie je pravda? Nejako sa v tom prispevku neviem
> dopatrat rozdielu voci tomu co som pisal....
> Ako som pisal:
> Direktiva (ano, spravne je direktiva) "static" vravi kompileru, ze
> premenna pouziva staticku pamat. Pod cim ja rozumiem, ze ma pevne
> pridelenu adresu v pamati.
> Druhe moje tvrdenie "Teoreticky by sa mala nastavit na 0", Vasa citacia
> iba potvrdzuje.
> A tym, ze pred premennu vrazim IAR-ovske "_no_init_" poviem kompileru
> aby tuto premennu neinicializoval (nulovat) po resete.
> Neviem ako sa "_no_init_" pise v codevision, ale cez cstartup.asm sa to
> da ovplyvnit (okrem ineho)...
>
> Co som poplietol?
>
> -mt-
>
>
> Miroslav Šinko  wrote / napísal(a):
>> To nie je pravda, dokonca norma ANSI C hovori o hodnotach
>> neinicializovanych premennych:
>>
>> 10 If an object that has automatic storage duration is not initialized
>> explicitly, its value is
>> indeterminate. If an object that has static storage duration is not
>> initialized explicitly,
>> then:
>> -- if it has pointer type, it is initialized to a null pointer;
>> -- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
>> -- if it is an aggregate, every member is initialized (recursively)
>> according to these rules;
>> -- if it is a union, the first named member is initialized
>> (recursively) according to these
>> rules.
>>
>> miro
>>
>> 2009/3/5 admin.mtech <admin.mtech@gmail.com>:
>>
>>> pokial viem klucove slovo "static" vravi, ze nasledne deklarovana
>>> premenna bude mat priradene pamatove miesto aj po vyskoceni z funkcie.
>>> Cize sa z nej vlastne stane globalna premenna.
>>> To ale nenamena, ze po starte programu bude mat premenna definovanu hodnotu.
>>> Teoreticky by sa mala nastavit na 0. Prakticky ale treba vediet co s
>>> nou  (s jej pamatovym miestom) urobi cstartup.asm
>>> Pokial sa pouzije (u IAR-a) klucove slovo _no_init_, tak sa nebude
>>> nulovat po resete.
>>>
>>> Co vlastne od tej (tych) premennej potrebujete?
>>>
>>> -mt-



Další informace o konferenci Hw-list