Подтвердить что ты не робот

Пытаясь использовать '#include <stdbool.h>' в VS 2010

Я пытаюсь использовать файл библиотеки stdbool.h в программе на C. Однако при попытке скомпилировать сообщение появляется сообщение об ошибке: intellisense не может открыть исходный файл stdbool.h.

Кто-нибудь может посоветовать, как я получу визуальную студию, чтобы это узнать? Правильно ли этот файл заголовка? Я читаю книгу о программировании на языке C.

4b9b3361

Ответ 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

Ответ 2

Создайте свой собственный файл, чтобы заменить stdbool.h, который выглядит следующим образом:

#pragma once

#define false   0
#define true    1

#define bool int

В Visual Studio 2010 у меня возникла проблема с использованием typedef int bool;, как было предложено в другом месте. IntelliSense жаловалась на "недопустимую комбинацию спецификаторов типов". Кажется, что имя "bool" по-прежнему особенное, хотя оно не определено.

Ответ 3

В качестве предупреждения на платформах x64 VS2017 (я не уверен в предыдущих версиях) определяет bool как значение 1 байт на С++ (например, a char). Итак, это

typedef int bool;

может быть действительно опасным, если вы используете его как int (4 байта) в файлах C и как родной bool в С++ (1 байт) (например, struct в .h может иметь разные размеры зависят от того, компилируете ли вы его с помощью C или С++).