【问题标题】:C - bool data type in struct causes exceptions [duplicate]C - 结构中的布尔数据类型导致异常[重复]
【发布时间】:2013-12-08 04:56:02
【问题描述】:

简单地说,我有以下代码(简化):

void Example()
{
    struct AuctionVars auction;
    memset(&auction, 0, sizeof(struct AuctionVars));
}

我有以下结构:

struct AuctionVars
{
    float minBidIncrement;
    int numAuctionItems;
    float* auctionItemValues;
};

当我把它改成这样时:

struct AuctionVars
{
    float minBidIncrement;
    int numAuctionItems;
    float* auctionItemValues;
    bool isAuctionClosed;
};

我的程序在任何地方引用或使用AuctionVars 变量时都会遇到很多错误。

我已经发现 Visual Studio 编译器使用 C89 并且不支持在代码块开头以外的任何地方声明变量,那么这是 C99 的另一个限制,其中结构中不支持 bool 类型?还是我又犯了一个愚蠢的错误?

【问题讨论】:

  • "Visual Studio 编译器使用 C99" - 你的意思是 C89
  • “得到一大堆异常” - 你的意思是“编译器错误”:)
  • “异常”一词通常指的是运行时错误,它们是 C++ 而非 C 的特性。听起来您可能遇到了编译时错误——您应该包括您问题中的错误文本。
  • 对不起,我的意思是编译器错误,我的意思也是C89。感谢您的更正。
  • bool 不是 C89/C90 中的标准类型。 _Bool 是 C99 和 C11 中的标准类型;您可以通过包含<stdbool.h> 来公开bool。在 C89/C90 中,如果您没有为类型 bool 提供定义,则会出现编译错误。不要忘记 MSVC 陷入了 20 年前的时间扭曲;它只支持 C89/C90 语言,不支持古代 C99 或现代 C11 版本。

标签: c exception struct


【解决方案1】:

呃,没关系,我刚刚发现 C 不支持 bool 关键字。这对我来说是一记耳光。

【讨论】:

  • 不是关键字,不,但stdbool.h 有一个bool 宏,它在C99 及更高版本中扩展为_Bool 类型
  • @EdS。如果我错了,请纠正我,但我很确定它仍然不是 关键字
  • @ValekHalfHeart:这就是他说“不是关键字,不是”的原因。但是 Visual Studio(截至 2010 Express 版本)不支持<stdbool.h>
  • 还有你对的 Valek,不是关键字,是原始数据类型,C 显然不支持。
【解决方案2】:

我已经发现 Visual Studio 编译器使用 C99 并且不支持在代码块开头以外的任何地方声明变量,那么这是 C99 的另一个限制,即结构中不支持 bool 类型吗?还是我又犯了一个愚蠢的错误?

不了解visual studio,但C99支持布尔类型。

FAQ list · Question 9.1

传统上,C 不提供标准的布尔类型,部分原因是为了让程序员做出适当的空间/时间权衡。

C99提供_Bool类型,布尔变量可以声明为

_Bool var;  

_Boolint 类型。

除了定义_Bool 类型外,C99 还提供了一个标头<stdbool>,它可以更轻松地使用布尔类型。此标头中提供了宏 bool。您可以使用此标头和宏bool 将布尔类型定义为

#include <stdbool.h>
bool var;  

【讨论】:

  • 对不起,我在原来的帖子中犯了一个错误,我现在会修正。 Visual Studio 使用 C89,而不是 C99。没有 _Bool 类型,也没有提供 stdbool.h 头文件。
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2011-04-29
  • 2018-05-06
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多