Вопрос по c – Если bool является макросом для int, почему он имеет другой размер?

6

Я надеялся, что кто-нибудь сможет объяснить, почему

#include <stdbool.h>

printf("size of bool %d\n", sizeof(bool));
printf("size of int %d\n", sizeof(int));

выходы на

size of bool 1
size of int 4

Я смотрел наhttp://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html что, по-видимому, указывает на то, что bool - это, по сути, макрос для _Bool, который при значении true или false на самом деле является просто макросом для целочисленной константы. Если это целое число, то почему оно не одинакового размера?

Я спрашиваю, потому что нам потребовалось слишком много времени для отладки программы, для которой мы не выделяли достаточно памяти.

Error: User Rate Limit Exceededx*sizeof(bool)Error: User Rate Limit ExceededboolError: User Rate Limit Exceeded NickO
Error: User Rate Limit Exceededx*sizeof(bool*)Error: User Rate Limit Exceededx*sizeof(bool)Error: User Rate Limit Exceeded4*x*sizeof(bool)Error: User Rate Limit Exceededsizeof(bool*)Error: User Rate Limit Exceeded wkl
Error: User Rate Limit ExceededboolError: User Rate Limit ExceededsmallerError: User Rate Limit Exceeded detly
Error: User Rate Limit ExceededboolError: User Rate Limit Exceededmalloc(x*sizeof(bool))Error: User Rate Limit Exceededmalloc(4*x*sizeof(bool))Error: User Rate Limit Exceeded NickO
Error: User Rate Limit Exceededx*sizeof(bool)Error: User Rate Limit Exceededsizeof(bool*)Error: User Rate Limit Exceededsizeof(bool*)Error: User Rate Limit Exceededsizeof(bool). wkl

Ваш Ответ

6   ответов
1

Error: User Rate Limit Exceeded

0

Error: User Rate Limit Exceededgcc -std=c99Error: User Rate Limit Exceeded

1

Error: User Rate Limit Exceededint. char, short, int, long, long longError: User Rate Limit ExceededcharError: User Rate Limit ExceededintError: User Rate Limit ExceededcharError: User Rate Limit Exceededlong longError: User Rate Limit Exceeded

Error: User Rate Limit ExceededcharError: User Rate Limit Exceededint8_tError: User Rate Limit Exceededint32_tError: User Rate Limit Exceeded

1

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

bool flag = TRUE; -> byte flag = 0x01;

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

malloc(4*sizeof(bool));

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded NickO
11

Error: User Rate Limit Exceeded_BoolError: User Rate Limit ExceededtypedefError: User Rate Limit ExceededboolError: User Rate Limit Exceededstdbool.hError: User Rate Limit Exceeded

2 An object declared as type _Bool is large enough to store the values 0 and 1.

Error: User Rate Limit ExceededcharError: User Rate Limit Exceededsizeof(char)Error: User Rate Limit Exceeded1.

_BoolError: User Rate Limit ExceededboolError: User Rate Limit ExceededsizeofError: User Rate Limit Exceeded1Error: User Rate Limit Exceededsizeof(bool) / sizeof(_Bool)Error: User Rate Limit Exceeded1.

Error: User Rate Limit Exceededstdbool.hError: User Rate Limit Exceeded

 #define bool    _Bool
 #if __STDC_VERSION__ < 199901L && __GNUC__ < 3
 typedef int _Bool;
 #endif

 #define false   0
 #define true    1

Error: User Rate Limit ExceededintError: User Rate Limit Exceeded_BoolError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

#include <stdio.h>
#include <stdbool.h>

int main() {
   printf("%zu\n", sizeof(_Bool));
   printf("%zu\n", sizeof(true));
   printf("%zu\n", sizeof(false));

}

Error: User Rate Limit Exceeded

λ > ./a.out 
1
4
4

Error: User Rate Limit Exceededsizeof(true)Error: User Rate Limit Exceededsizeof(false)Error: User Rate Limit Exceededsizeof(int).

Error: User Rate Limit ExceededprintfError: User Rate Limit Exceededsize_tError: User Rate Limit ExceededzError: User Rate Limit Exceeded%zuError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded NickO
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsizeofError: User Rate Limit Exceeded
2

Error: User Rate Limit Exceeded_BoolError: User Rate Limit Exceeded_BoolError: User Rate Limit Exceeded

Похожие вопросы