C: premenne static

Miroslav Šinko sinkomiro na gmail.com
Pondělí Červenec 29 22:45:28 CEST 2024


Lokalna static je viditelna len vo funkcii. Ak je jej vyuzitie len v tej 
jednej funkcii, je bezpecnejsie ju pouzit takto; oproti pouzitiu 
globalnej premennej.

miro

On 29.7.2024 22:27, Jan Waclawek wrote:
> [preposielam]
> 
> Ahojte,
> chcel by som sa spytat tych znalejsich standardu C99 aky je rozdiel medzi
> premnnymi v nasledujucich dvoch fragmentoch kodu. Ide o kompilator XC8 a
> MCC-konfigurator. Pokial zapnem generovanie kodu a automaticky callback
> rutiny pri TMR0, tak to vygeneruje nasledovny fragment kodu:
> 
> #define CALLBACK_COUNTER 10
> 
> void __interrupt TMR0_OverflowISR(void) {
> 
> static volatile unsigned char ISR_Counter = 0;
> 
>     if(++ISR_Counter >= CALLBACK_COUNTER) {
>         CallBackRoutine();
>         ISR_Counter = 0;
>      }
> }
> 
> Ja by som to napisal takto:
> 
> #define CALLBACK_COUNTER 10
> 
> volatile unsigned char ISR_Counter = 0;
> 
> void __interrupt TMR0_OverflowISR(void) {
> 
>     if(++ISR_Counter >= CALLBACK_COUNTER) {
>         CallBackRoutine();
>         ISR_Counter = 0;
>      }
> }
> 
> Viete mi prosim vysvetlit niekto aky je rozdiel v C99 v premennych raz
> globalnych bez static a raz lokalnych s privlastkom static? Ako myslim, ze
> som pochopil, ze ta static lokalna zostane "ziva" aj po opusteni rutiny
> prerusenia, ale nie je mi to velmi jasne. Preto sa pytam. On totiz ten XC8
> v2.46 je uz asi moc C99 kompatibilny a ja nie som az taky dobry programator
> C, aby som jednotlive nuansy ovladal dokonale.
> 
> Velmi pekne dakujem za odpovede a vysvetlenie.
> 
> A.
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 


Další informace o konferenci Hw-list