De C et de C++' bool
type sont différents, mais, aussi longtemps que vous vous en tenez à la même compilateur (dans votre cas, gcc), il devrait en être sûre, que c'est raisonnable scénario commun.
En C++, bool
a toujours été un mot-clé. C n'en avais pas jusqu'à ce que le C99, où ils ont introduit le mot-clé _Bool
(parce que les gens utilisés pour la définition de type ou #define bool
comme int
ou char
en C89 code, donc directement l'ajout de bool
en tant que mot clé de casser le code existant); il est l'en-tête stdbool.h
qui devrait, en C, ont une définition de type ou n ° de définir à partir de _Bool
de bool
. Jetez un oeil à la vôtre; GCC de la mise en œuvre ressemble à ceci:
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
Ce qui nous conduit à penser que, au moins dans GCC, les deux types sont compatibles (à la fois la taille et l'alignement, de sorte que la structure de mise en page restera le même).
A noter également, l' Itanium ABI, qui est utilisé par la GCC et la plupart des autres compilateurs (à l'exception de Visual Studio; comme l'a noté M. Matthieu dans les commentaires ci-dessous) sur de nombreuses plates-formes, spécifie que _Bool
et bool
suivre les mêmes règles. C'est une forte garantie. Un troisième indicateur, nous pouvons obtenir est de l' Objective-C manuel de référence de l', qui dit que l'Objective-C et Objective-C++, où le respect de C et de C++de conventions respectivement, bool
et _Bool
sont équivalentes; donc je serais assez bien dire que, si les normes ne garantit pas cela, vous pouvez supposer que oui, ils sont équivalents.
Edit:
Si la norme ne garantit pas qu' _Bool
et bool
seront compatibles (dans la taille, l'alignement, et le rembourrage), qu'est-ce?
Quand nous disons que ces choses sont "dépendants de l'architecture", nous voulons dire qu'ils sont ABI dépendante. Chaque compilateur met en œuvre un ou plusieurs ABIs, et deux compilateurs (ou versions d'un même compilateur) sont compatibles s'ils mettent en œuvre la même ABI. Depuis, il est prévu d'appeler du code C à partir de C++, c'est ubiquitaire commun, tous C++ ABIs j'ai jamais entendu parler d'étendre le local C ABI.
Depuis l'OP posé sur Beaglebone, nous devons vérifier les BRAS ABI, et plus particulièrement de la GNU ARM EABI utilisé par Debian. Comme indiqué par Justin Time dans les commentaires, le BRAS ABI, en effet, déclare C++'ABI d'étendre C, et qui en _Bool
et bool
sont compatibles, les deux étant de taille 1, l'alignement 1, représentant une machine octet non signé. Donc la réponse à la question, sur la Beaglebone, oui, _Bool
et bool
sont compatibles.