2015-12-25 11 views
5

Soweit ich finden konnte, ist die Breite des bool Typs implementierungsdefiniert. Aber gibt es irgendwelche booleschen Typen mit fester Breite, oder sollte ich mich beispielsweise an eine uint8_t halten, um eine Boole mit fester Breite darzustellen?Gibt es einen Bolt-Typ mit fester Breite in C++?

[EDIT] Ich machte dieses Python-Skript, das automatisch eine C++ - Klasse generiert, die die Variablen enthalten kann, die ich zwischen einem Mikrocontroller und meinem Computer senden möchte. Die Funktionsweise besteht darin, dass auch zwei Arrays einen Zeiger auf jede dieser Variablen und die Größe jedes einzelnen halten. Dies gibt mir die notwendigen Informationen, um jede dieser Variablen einfach zu serialisieren und zu deserialisieren. Damit dies funktioniert, müssen die Größe, die Endianz usw. der Variablentypen auf beiden Seiten gleich sein, da ich den gleichen generierten Code auf beiden Seiten verwende. Ich weiß nicht, ob das noch ein Problem sein wird, aber ich erwarte es nicht. Ich habe bereits mit diesem (32bit ARM) Chip gearbeitet und hatte in der Vergangenheit keine Probleme beim Senden von Integer- und Float-Typen. Es wird jedoch ein paar Tage dauern, bis ich zurück bin und Booleans auf dem Chip ausprobieren kann. Dies könnte später ein größeres Problem sein, da dieser Code später auf anderen Chips wiederverwendet werden könnte.

Also meine Frage ist. Gibt es eine feste Breite bool Typ in den Standard-Bibliotheken definiert oder sollte ich nur eine Uint8_t, um den Boolean zu repräsentieren?

+2

Ein 'Bool'-Typ ist auf' true' und 'false' festgelegt. Wie können 2 Zustände unterschiedliche Breite haben? –

+0

Sprechen Sie über das Verpacken eines oder mehrerer Bools in einem integrierten Typ? –

+1

Beziehen Sie sich auf die Größe im Speicher? Wenn dies der Fall ist, ist es compilerabhängig für bool. In 99,9% nimmt es 1 Bit auf, da es wahr oder falsch, ein oder aus darstellt. Die anderen 7 sind jedoch gefüllt, können nicht verwendet werden. Hat das für dich beantwortet? – Emz

Antwort

3

Gibt es nicht. Verwenden Sie einfach uint8_t, wenn Sie sich der Größe sicher sein müssen. Jeder Integer-Typ kann in C-verwandten Sprachen leicht als Boolean behandelt werden. Eine lange Diskussion darüber, wie bool die Größe nicht durch den Standard garantiert wird, um einen bestimmten Wert zu sein, finden Sie unter https://stackoverflow.com/a/4897859/1105015.

+3

natürlich gibt es keine implizite Umwandlung in 'Bool', wenn Sie dies tun, so müssen Sie vorsichtig sein. Zum Beispiel 'uint8_t x = 0x500 & 0x100;' wird '0' sein, aber ein bool wäre' true' –

+0

@ M.M wahr gewesen, aber es ist einfach zu beheben: 'uint8_t x = 0x500 & 0x100! = 0'. Du musst nur vorsichtig sein. –

+1

@MarkRansom ITYM '(0x500 & 0x100)! = 0';) –

Verwandte Themen