Windows: Насколько большой BOOL?

В [1 117] C:

  • void foo() означает "функцию foo, взятие неуказанного количества аргументов неуказанного типа"
  • void foo(void) означает "функцию foo взятие никаких аргументов"

В [1 118] C++ :

  • void foo() означает "функцию foo, взятие никаких аргументов"
  • void foo(void) означает "функцию foo взятие никаких аргументов"

Путем записи foo(void), поэтому, мы достигаем той же интерпретации через оба языка и делаем наши заголовки многоязычными (хотя мы обычно должны делать еще некоторые вещи к заголовкам для создания их действительно межъязыковыми; а именно, оберните их в extern "C", если мы компилируем C++).

6
задан Ian Boyd 29 December 2009 в 14:01
поделиться

6 ответов

int официально является «интегральным типом, который больше или равен размеру типа short int и короче или равен размеру типа long». Он может быть любого размера и зависит от реализации.

Это 4 байта (32 бита) в текущей реализации компилятора Microsoft (это зависит от компилятора, а не от платформы). Вы можете увидеть это на странице Fundamental Types (C ++) MSDN (внизу).

Размеры основных типов

 Type Size
======================= =========
int, unsigned int 4 байта
31
ответ дан 8 December 2019 в 02:08
поделиться

это зависит от платформы, но легко узнать:

sizeof(int)*8
7
ответ дан 8 December 2019 в 02:08
поделиться

С точки зрения кода, вы всегда можете определить размер в битах любого типа с помощью:

#include <windows.h>
#include <limits.h>

sizeof (BOOL) * CHAR_BIT

Однако с семантической точки зрения количество битов в BOOL предполагается равным единице . Другими словами, все ненулевые значения BOOL должны обрабатываться одинаково, включая значение TRUE . FALSE (который равен 0) - единственное другое значение, которое должно иметь особое значение. Чтобы строго следовать этому правилу, нужно немного подумать. Например, чтобы преобразовать BOOL в char, вам нужно сделать следующее:

4
ответ дан 8 December 2019 в 02:08
поделиться

Это зависит от реализации. (Даже в той же ОС.) Используйте sizeof (int) , чтобы найти размер int в реализации, которую вы сейчас используете. Вам никогда не следует жестко кодировать это в вашей программе на C.

А еще лучше использовать sizeof (BOOL) , чтобы вам не приходилось беспокоиться, если MS когда-либо изменит свое определение BOOL.

2
ответ дан 8 December 2019 в 02:08
поделиться

Они оба имеют размер 32 бита (4 байта).

В языках, которые имеют собственный логический тип, логические значения обычно имеют размер 8 бит (1 байт), а не 1 бит, как я когда-то думал.

2
ответ дан 8 December 2019 в 02:08
поделиться

Он такой большой, как говорит sizeof (int)?

(Это в байтах, умножьте его на 8.)

1
ответ дан 8 December 2019 в 02:08
поделиться
Другие вопросы по тегам:

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