Почему VS2010 выдает синтаксические ошибки при правильном синтаксисе?

#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 в проекте.