Äh, nein, das meiste ist entweder grob vereinfacht oder gar falsch.
Erstens mal, im ursprünglichen C, das ist immerhin schon 40 Jahre alt, gab es keinen Boolean Typ. Auch in den ersten C++ Versionen nicht. Daher dieses Chaos.
Mittlerweile gibt es in ISO-C und ISO-C++ solche Typen, das ist dann bool. Wie groß die sind, hängt wahrscheinlich vom Compiler und der Prozessorarchitektur ab. Ich gehe mal davon aus, dass der Standard irgendwas zur Konvertierbarkeit von int und bool sagt, ich habe aber keinen hier.
Tabellen wie diese hier sagen meist nichts über die Größe von bool:
http://en.cppreference.com/w/cpp/language/types
[Edit] In VC++ und dem C++ Builder gilt wohl sizeof(bool) == sizeof(char)[/Edit]
Zweitens, per Konvention, sind GROSS geschriebenen Sachen entweder Makros (#define) oder typedefs.
Die
WinApi stammt auch noch aus der Zeit, als es in C keinen bool gab. Dort findet sich (Quelle WinDef.h aus Visual Studio 2008):
Code:
#ifndef BASETYPES
#define BASETYPES
typedef unsigned long ULONG;
typedef ULONG *PULONG;
typedef unsigned short USHORT;
typedef USHORT *PUSHORT;
typedef unsigned char UCHAR;
typedef UCHAR *PUCHAR;
typedef char *PSZ;
#endif /* !BASETYPES */
#define MAX_PATH 260
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
// gekürzt ...
#undef FAR
#undef NEAR
#define FAR far
#define NEAR near
#ifndef CONST
#define CONST const
#endif
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
Solche Dinge sind also immer Bibliotheksspezifisch. Zumindest was die
WinAPI angeht, kann man aber von festen größen ausgehen.
Aber nicht davon, dass ein int immer 32 Bit groß ist, das ist bei Visual C++ und dem C++ Builder der Fall, beim Intel C++ aber z.B. nicht immer.
[Edit]
Übrigens gilt für
COM anscheinend
Code:
typedef short VARIANT_BOOL;
Das sind also 16-Bit, und VARIANT_TRUE ist -1 !
[/Edit]
Zu C#, dort ist ein bool definitiv kein int, sondern ein Alias für
Code:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Boolean : IComparable, IConvertible, IComparable<bool>,
IEquatable<bool>