为什么VS2010在语法正确时会出现语法错误?

时间:2011-04-15 00:47:29

标签: c visual-c++ boolean 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是一个typedef'd结构,FYI。所有这些函数声明似乎都是正确的语法。然而,在尝试构建时,我从第一个bool函数开始,从列表中获取以下语法错误。

  

错误2错误C2059:语法错误:';'

我没有看到问题出在哪里。同样,这只是一个小例子。我还收到语法错误,如下面的

bool found;
  

错误29错误C2065:'bool':未声明的标识符

我真的迷失了这个。这里发布的代码不是我自己的,它来自数据结构书,但它看起来也是正确的。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:8)

bool不是C中的基本类型。

Visual C ++仅实现C90,它没有bool类型。 C99通过bool标头添加了对<stdbool.h>的支持,但Visual C ++不支持此功能。

您应该使用int或为bool创建自己的typedef。

答案 1 :(得分:1)

检查包含该标题的文件的文件扩展名。

如果您没有告诉它以不同的方式(在项目设置中),Visual Studio将自动将.c文件编译为C而不是C ++。

Visual Studio的“C”支持是......有趣 - 根据我的理解,它实际上是C89而不是C99,你不能只是轻弹开关来获得C99。除了C89 / C99之外,bool不是C中的内置类型。

您可以将所有文件重命名为.cpp以将其编译为C ++,或者修改项目设置以强制编译为项目中每个.c / .cpp / .cc文件的C ++。