0

我正在使用一个相当旧的代码库,而且都是 C99 之前的代码。因此,没有bool类型,而是一个BOOLEAN枚举。我是一个年轻的枪手,所以我喜欢 VS 2010,但它与旧代码库的配合并不是特别好。我猜它使用 MSVC2010 来做它的在线错误高亮,我也猜MSVC2010 符合 C99 标准。我可能错了,但无论如何,当我用布尔表达式分配 BOOLEAN 变量时,它会突出显示“错误”。我举一个简单的例子:

typedef enum boolean_tag {FALSE, TRUE} BOOLEAN;
BOOLEAN test = FALSE;
test = 1 == 1;

在 VS2010 编辑器中,=将错误突出显示,并且在鼠标悬停时会注意到 type 的值bool不能分配给 type 的实体BOOLEAN。由于 C99 之前没有 a 的概念bool,这应该只是枚举值的分配,因此不是错误。

所以,我的问题是:有没有办法告诉 VS2010 使用 C99 之前的语法/错误检查?或者,这是一个延伸,它是否完全为这些功能使用了另一个编译器?

谢谢。

编辑:更正了 MSVC2010 假设

4

1 回答 1

3

需要考虑的一些事项:

  • Visual Studio 是一个 C++ 编译器,因此不适合编译严格符合的 C 程序。
  • Visual Studio 不符合任何版本的 C 标准。它当然不遵循或执行 C99 标准。
  • 在 C++ 中,表达式的1 == 1计算结果为true类型bool
  • 在 C 中,任何版本的标准都会1 == 1计算1为 type的值int

Visual Studio 抱怨是因为您试图将 bool 存储在枚举中,这在 C++ 中是不合适的,C++ 是一种具有某种强类型的语言。在 C 语言中没有这样的限制。

您的问题的答案是:您遇到这些问题是因为您尝试在编译器中为另一种编程语言编译 C 程序。

于 2013-02-25T15:10:10.073 回答