Ответ 1
typedef int bool;
#define false 0
#define true 1
работает просто отлично. Заголовки Windows делают то же самое. Нет абсолютно никакой причины беспокоиться о "потерянной" памяти, затраченной на сохранение двухбитового значения в int
.
Как отметил Александр в комментарии, компилятор Microsoft C (в комплекте с Visual Studio) не поддерживает C99 и, вероятно, не собирается к. Это печально, потому что stdbool.h
и многие другие гораздо более полезные функции поддерживаются в C99, но не в Visual Studio. Он застрял в прошлом, поддерживая только старый стандарт, известный как C89. Я удивлен, что вы не столкнулись с проблемой, которая пытается определить переменные где-то, кроме начала блока. Это кусает меня каждый раз, когда я пишу C-код в VS.
Одним из возможных решений является настройка Visual Studio для компиляции кода как С++. Тогда почти все, что вы читаете в книге C99, будет работать без удушения компилятора. В С++ тип bool
встроен (хотя это 1-байтовый тип в режиме С++, а не 4-байтовый тип, как в режиме C). Чтобы внести это изменение, вы можете отредактировать параметры компиляции проекта в среде IDE или просто переименуйте файл с расширением cpp
(а не c
). VS автоматически настроит режим компиляции.
Современные версии Visual Studio (2013 и более поздние версии) предлагают улучшенную поддержку для C99, но она по-прежнему не завершена. Честно говоря, лучшее решение, если вы пытаетесь изучить C (и, следовательно, C99 в настоящее время), - это просто собрать другой компилятор. MinGW является хорошим вариантом, если вы работаете в Windows. Множество людей вроде Code:: Blocks IDE