Forum: Compiler & IDEs Wertebereich einer Variable ermitteln


von Adib (Gast)


Lesenswert?

Hallo, ich habe eine Variable vom Typ my_size_t die ich in verschiededen 
Projekten zb zum definieren von Puffer-Längenangaben einsetze.

Mal ist sie uint8_t mal uint16_t.

ich habe eine Funktion
 void buffer_init(size_t);
und möchte je nach size_t die größtmögliche Zahl in den Funktionsaufruf 
übergeben.
 buffer_init(UINT16_MAX) oder buffer_init(UINT8_MAX)

Ich müsste also mit bedingter Compilierung arbeiten ...

Gibt es eine elegante Art herauszubekommen, welchen Wertebereich die 
Variable hat? So dass ich ich einfach schreiben kann

 buffer_init(MAX(typeof(size_t));

Danke, Adib.

von Thomas B. (nichtessbar)


Lesenswert?

Der Compiler sollte die nicht zutreffenden Blöcke in folgenden Code bei 
eingechalter Optimierung eigtl. entfernen

(ungetestet)
1
if(sizeof(my_size_t) == 8)
2
    // init with maxval von uint8_t
3
else if (sizeof(my_size_t) == 16)
4
   // init with maxval of uint16_t

und so weiter

von Adib (Gast)


Lesenswert?

sowas hatte ich mir halt auch überlegt. Dachte aber; frag mal die 
Netzgemeinde, ob es was universelles gibt, wo ich nicht jeden speziellen 
Einzelfall bearbeiten muss.

Im übrigen liefert sizeof() die Größe in Bytes nicht in Bits.

Jetzt habe ich geschrieben:
 buffer_init((1 << (sizeof(my_size_t) * 8)) - 1);

habe aber keineAhnung, ob das bei 16bit auf dem Atmel auch noch 
funktioniert.


Adib.

von Stefan E. (sternst)


Lesenswert?

Warum nicht einfach:
1
buffer_init((my_size_t)-1);
Oder wenn der Parameter von buffer_init eh ein my_size_t ist:
1
buffer_init(-1);

von Thomas B. (nichtessbar)


Lesenswert?

Adib schrieb:
> Im übrigen liefert sizeof() die Größe in Bytes nicht in Bits.

Ups peinlich, aber du weißt worauf ich hinauswill ;)

Ist halt die Frage wie viele Varianten von my_size_t dass es gibt ob so 
eine if elseif konstruktion vertretbar ist oder ob etwas generisches 
sinnvoller ist

von Andreas B. (andreas_b77)


Lesenswert?

Mach halt zu deinem Typ my_size_t ein #define MY_SIZE_T_MAX mit dem 
passenden Wert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.