AKUT! Hjälp med att beräkna compare value (Atmel)

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
bearing
Inlägg: 11265
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: AKUT! Hjälp med att beräkna compare value (Atmel)

Inlägg av bearing »

Wedge skrev:"Static" har ingenting alls med initiering till noll att göra, och inte "volatile" heller.
Jag har inte påstått något om volatile. Variabeln var redan volatile i hennes program, därav förslaget static volatile.

Det enda jag påstått är att static initieras till 0. Det har jag blivit lärd.

Men du säger alltså att alla globala variabler, oavsett static, initieras till 0, och att static därmed är onödigt om det endast hade till syfte att få variabeln initierad till 0?

Hur som helst är det väl en bra ide att använda static på alla variabler som ska vara "globala i en fil", om man inte verkligen är ute efter att variabeln ska vara "global för alla moduler" i projektet.
Mr Andersson
Inlägg: 1397
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: AKUT! Hjälp med att beräkna compare value (Atmel)

Inlägg av Mr Andersson »

> Men du säger alltså att alla globala variabler, oavsett static, initieras till 0, och att static därmed är onödigt om det endast hade till syfte att få variabeln initierad till 0?

Ja det stämmer. En global variabel, dvs. en som har file scope, länkas som extern om inget annat anges specifikt.
If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external.
Och externa variabler är statiskt lagrade.
An object whose identifier is declared with external or internal linkage, or with the storage-class specifier static has static storage duration.
Och statiskt lagrade objekt initialiseras till 0 om inget annat anges.
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.
Värt att notera är sista raden om unions.

> Hur som helst är det väl en bra ide att använda static på alla variabler som ska vara "globala i en fil", om man inte verkligen är ute efter att variabeln ska vara "global för alla moduler" i projektet.

Jo det håller jag med om. Men det är ju en personlig smaksak. Använder man aldrig variabeln i en annan translation unit så blir det ju exakt samma binärkod som om den varit internal.
Skriv svar