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.
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
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.
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); |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.