#c #visual-c #boolean #visual-c -2010
#c #visual-c #логическое #visual-c -2010
Вопрос:
У меня проблема с тем, что VS2010 (и VS2008) выдают мой большой список синтаксических ошибок. Однако синтаксис действительно правильный. Вот небольшой пример;
У меня есть следующий блок кода внутри файла .h
// Prototype Declarations
LIST* createList (int (*compare) (void*, void*));
LIST* destroyList (LIST* plist);
int addNode (LIST* pList, void* dataInPtr);
bool removeNode (LIST* pList, void* keyPtr, void** dataOutPtr);
bool searchList (LIST* pList, void* pArgu, void** pDataOut);
bool retrieveNode (LIST* pList, void* pArgu, void** dataOutPtr);
bool traverse (LIST* pList, int fromWhere, void** dataOutPtr);
int listCount (LIST* pList);
bool isListEmpty (LIST* pList);
bool isListFull (LIST* pList);
К вашему сведению, LIST — это структура с определением типа. Все эти объявления функций имеют правильный синтаксис. Тем не менее, при попытке сборки я получаю следующие синтаксические ошибки, начиная с первой функции bool, идущей вниз по списку.
Ошибка 2 ошибка C2059: синтаксическая ошибка: ‘;’
Я не вижу, в чем проблема. Опять же, это всего лишь небольшой пример. Я также получаю синтаксические ошибки, такие как следующие
bool found;
Ошибка 29 ошибка C2065: ‘bool’: необъявленный идентификатор
Я действительно в растерянности по этому поводу. Размещенный здесь код не мой собственный, он взят из книги по структурам данных, но опять же он выглядит правильным. Будем признательны за любую помощь. Спасибо!
Комментарии:
1. .c или .cc/.cpp расширение файла? То есть в файле, включающем .h.
2. проверьте строки вокруг кода, который вызывает у вас проблемы, и проверьте файлы заголовков (они часто доставляют мне проблемы).
3. Я также не вижу никаких синтаксических ошибок в этом фрагменте кода. Одним из источников ошибки, который я вижу, является отсутствие определения
LIST
перед объявлениями прототипа. Объявляется ли он или файл, в котором он объявлен, включается передcreateList
определением?4. Попробуйте сократить код до наименьшего образца, который генерирует эти ошибки, и опубликуйте здесь (если, сделав это, вы не получите ответа).
Ответ №1:
bool
не является фундаментальным типом в C.
Visual C реализует только C90, у которого нет bool
типа. C99 добавил поддержку bool
через <stdbool.h>
заголовок, но Visual C этого не поддерживает.
Вам следует либо использовать int
, либо создать свой собственный typedef для bool
.
Комментарии:
1. Следует отметить, что
_Bool
это фундаментальный тип в языке C иbool
может быть получен черезstdbool.h
, за исключением того, что MSVC не поддерживает язык C…2. Вот и все, спасибо, сэр! Я не знал, что Visual C использовал C90, я предположил C99.
Ответ №2:
Проверьте расширение файла, включая этот заголовок.
Visual Studio автоматически скомпилирует файлы .c как C, а не C , если вы не укажете ему делать что-либо по-другому (в настройках проекта).
Поддержка Visual Studio «C» … интересна — насколько я понимаю, на самом деле это C89, а не C99, и вы не можете просто щелкнуть переключателем, чтобы получить C99. C89 / C99 в стороне, bool не является встроенным типом в C.
Вы можете переименовать все свои файлы в .cpp, чтобы скомпилировать их как C , или изменить настройки проекта, чтобы принудительно выполнить компиляцию как C для каждого файла .c /.cpp /.cc в проекте.