mirror of
https://github.com/rui314/chibicc
synced 2024-12-01 18:26:56 +03:00
44bba965cb
_Bool isn't just a 1-bit integer because when you convert a value to bool, the result is 1 if the original value is non-zero. This is contrary to the other small integral types, e.g. char, as you can see below: char x = 256; // x is 0 _Bool y = 256; // y is 1
23 lines
541 B
C
23 lines
541 B
C
#include "test.h"
|
|
|
|
int main() {
|
|
ASSERT(1, ({ char x; sizeof(x); }));
|
|
ASSERT(2, ({ short int x; sizeof(x); }));
|
|
ASSERT(2, ({ int short x; sizeof(x); }));
|
|
ASSERT(4, ({ int x; sizeof(x); }));
|
|
ASSERT(8, ({ long int x; sizeof(x); }));
|
|
ASSERT(8, ({ int long x; sizeof(x); }));
|
|
|
|
ASSERT(8, ({ long long x; sizeof(x); }));
|
|
|
|
ASSERT(0, ({ _Bool x=0; x; }));
|
|
ASSERT(1, ({ _Bool x=1; x; }));
|
|
ASSERT(1, ({ _Bool x=2; x; }));
|
|
ASSERT(1, (_Bool)1);
|
|
ASSERT(1, (_Bool)2);
|
|
ASSERT(0, (_Bool)(char)256);
|
|
|
|
printf("OK\n");
|
|
return 0;
|
|
}
|