【发布时间】: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 版本。