пытаясь использовать '#includeв VS 2010 - PullRequest
23 голосов
/ 18 декабря 2011

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

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

Ответы [ 3 ]

26 голосов
/ 18 декабря 2011
typedef int bool;
#define false 0
#define true 1

работает просто отлично. Заголовки Windows делают то же самое. Нет абсолютно никаких причин беспокоиться о «потраченной впустую» памяти, храня двухбитное значение в int.

Как отметил Александр в комментарии, компилятор C Microsoft (в комплекте с Visual Studio) не поддерживает C99 и, вероятно, не собирается. К сожалению, stdbool.h и многие другие гораздо более полезные функции поддерживаются в C99, но не в Visual Studio. Он застрял в прошлом, поддерживая только более старый стандарт, известный как C89. Я удивлен, что вы не столкнулись с проблемой, пытаясь определить переменные где-то, кроме начала блока. Это кусает меня каждый раз, когда я пишу код C в VS.

Один из возможных обходных путей - настроить Visual Studio для компиляции кода на C ++. Тогда почти все, что вы прочитали в книге C99, будет работать без удушья компилятором. В C ++ встроен тип bool (хотя он является 1-байтовым типом в режиме C ++, а не 4-байтовым типом, как в режиме C). Чтобы внести это изменение, вы можете отредактировать параметры компиляции вашего проекта в среде IDE или просто переименовать файл с расширением cpp (вместо c). VS автоматически установит режим компиляции соответственно.

Современные версии Visual Studio (2013 и более поздние версии) предлагают улучшенную поддержку C99, но она еще не завершена. Честно говоря, лучшее решение, если вы пытаетесь изучить C (и, следовательно, C99 в настоящее время), это просто выбрать другой компилятор. MinGW - хороший вариант, если вы работаете в Windows. Многим нравится код :: блоки IDE

13 голосов
/ 18 января 2013

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

#pragma once

#define false   0
#define true    1

#define bool int

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

2 голосов
/ 27 сентября 2017

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

typedef int bool;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...