2015-12-25 9 views
5

Per quanto ho potuto trovare, la larghezza del tipo bool è definita dall'implementazione. Ma ci sono tipi booleani a larghezza fissa, o dovrei attenermi, per esempio, a uint8_t per rappresentare un bool a larghezza fissa?Esiste un tipo di bozza a larghezza fissa in C++ standard?

[EDIT] Ho creato questo script python che auto-genera una classe C++ che può contenere le variabili che voglio essere in grado di inviare tra un microcontroller e il mio computer. Il modo in cui funziona è che mantiene anche due array con un puntatore a ciascuna di queste variabili e la dimensione di ciascuna di esse. Questo mi dà le informazioni necessarie per serializzare e deserializzare facilmente ciascuna di queste variabili. Perché ciò avvenga, tuttavia, le dimensioni, l'endianità, ecc. Dei tipi di variabile devono essere le stesse su entrambi i lati poiché sto utilizzando lo stesso codice generato su entrambi i lati. Non so se questo sarà ancora un problema, ma non mi aspetto che lo sia. Ho già lavorato con questo chip (32 bit ARM) e non ho avuto problemi nell'invio di tipi interi e float in passato. Tuttavia ci vorranno alcuni giorni prima che io torni e possa provare i booleani sul chip. Questo potrebbe essere un problema più grande in seguito, dal momento che questo codice potrebbe essere riutilizzato su altri chip in seguito.

Quindi la mia domanda è. Esiste un tipo di larghezza fissa bool definito nelle librerie standard o dovrei semplicemente usare un uint8_t per rappresentare il valore booleano?

+2

Un tipo 'bool' è corretto su' true' e 'false'. Come possono 2 stati avere larghezza variabile? –

+0

Stai parlando di impacchettare uno o più bool in un tipo integrale? –

+1

Ti riferisci alle dimensioni nella memoria? Se è così è dipendente dal compilatore per il bool. Nel 99,9% occupa 1 bit poiché rappresenta true o false, on o off. Tuttavia, gli altri 7 sono imbottiti, non possono essere utilizzati. Ti è stata la risposta? – Emz

risposta

3

Non c'è. Basta usare uint8_t se è necessario essere sicuri della dimensione. Qualsiasi tipo intero può essere facilmente trattato come booleano nei linguaggi C-related. Vedere https://stackoverflow.com/a/4897859/1105015 per una lunga discussione su come la dimensione di bool non è garantita dallo standard come valore specifico.

+3

ovviamente non ci sono conversioni implicite in 'bool' quando si fa questo, quindi devi stare attento. Per esempio 'uint8_t x = 0x500 & 0x100;' sarà '0', ma un bool sarebbe stato' true' –

+0

@ M.M true, ma è facile da correggere: 'uint8_t x = 0x500 & 0x100! = 0'. Devi solo stare attento. –

+1

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

Problemi correlati