【问题标题】:Why does VS2010 give syntax errors when syntax is correct?为什么语法正确时VS2010会给出语法错误?
【发布时间】:2011-04-15 00:47:29
【问题描述】:

我在使用 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 的结构,仅供参考。所有这些函数声明似乎都是正确的语法。然而,在尝试构建时,我从第一个 bool 函数开始出现以下语法错误,顺着列表向下。

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

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

bool found;

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

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

【问题讨论】:

  • .c 或 .cc/.cpp 文件扩展名?在包含 .h 的文件上,即。
  • 检查出现问题的代码周围的行,并检查头文件(它们经常给我带来麻烦)。
  • 我在这段代码摘录中也看不到任何语法错误。我可以看到的错误来源之一是在原型声明之前缺少LIST 的定义。是在createList的定义之前被声明还是被声明的文件包含在其中?
  • 尝试将代码减少到产生这些错误的最小样本并在此处发布(如果这样做您没有得到答案)。

标签: c visual-c++ boolean visual-c++-2010


【解决方案1】:

bool 不是 C 中的基本类型。

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

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

【讨论】:

  • 需要注意的是_Bool是C语言中的基本类型,bool可以通过stdbool.h获得,只不过MSVC不支持C语言...跨度>
  • 就是这样,谢谢先生!我不知道 Visual C++ 使用 C90,我认为是 C99。
【解决方案2】:

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

如果您不告诉它做任何不同的事情(在项目设置中),Visual Studio 将自动将 .c 文件编译为 C 而不是 C++。

Visual Studio 的“C”支持……很有趣——据我了解,它实际上是 C89 而不是 C99,而且您不能只按一下开关来获得 C99。除了 C89/C99,bool 不是 C 中的内置类型。

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

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多