Почему VS2010 дает синтаксические ошибки, когда синтаксис правильный? - PullRequest
3 голосов
/ 15 апреля 2011

У меня проблема с 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 - это typedef'd структура, FYI. Все эти объявления функций имеют правильный синтаксис. Тем не менее, при попытке сборки я получаю следующие синтаксические ошибки, начиная с первой функции bool и переходя по списку.

Ошибка 2, ошибка C2059: синтаксическая ошибка: ';'

Я не вижу, в чем проблема. Опять же, это всего лишь маленький пример. Я также получаю синтаксические ошибки, такие как следующие

bool found;

Ошибка 29, ошибка C2065: 'bool': необъявленный идентификатор

Я действительно в растерянности. Код, размещенный здесь, не мой, а из книги по структурам данных, но опять-таки он выглядит правильно Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

8 голосов
/ 15 апреля 2011

bool не является фундаментальным типом в C.

Visual C ++ реализует только C90, который не имеет типа bool.C99 добавил поддержку bool через заголовок <stdbool.h>, но Visual C ++ не поддерживает это.

Вы должны либо использовать int, либо создать свой собственный typedef для bool.

1 голос
/ 15 апреля 2011

Проверьте расширение файла, включая этот заголовок.

Visual Studio автоматически скомпилирует файлы .c как C, а не C ++, если вы не скажете, чтобы это происходило иначе (в настройках проекта).

Поддержка Visual Studio "C" ... интересна - насколько я понимаю, на самом деле это C89, а не C99, и вы не можете просто щелкнуть переключателем, чтобы получить C99. Кроме C89 / C99, bool не является встроенным типом в C.

Вы можете переименовать все свои файлы в .cpp, чтобы скомпилировать их как C ++, или изменить настройки проекта, чтобы принудительно компилировать их как C ++ для каждого файла .c / .cpp / .cc в проекте.

...