这是正确的C声明吗? 如果是这样,为什么它不起作用?

我正在编写一本教程书中的演示程序,用于教授Unix和Windows的“C”。 但是,有时我会遇到一些代码,当完全输入时,它不想工作。

例如。

#include  int main() { /*This next line is the error */ int num = 2, bool = 0; if ( (num==2) && (!bool) ) { printf("The first test is untrue\n"); } else if( (num==2) && (!bool) ) { printf("The second test is true\n"); } else if( (num==2) && (bool==0) ) { printf("The third test is true - but unreached\n"); } return 0; } 

无论如何,就像我在标题中提到的那样,我很好奇我是否正确地声明了这些变量。 我正在使用Windows操作系统(7)。

使用C编译器时,不应该出现错误,因为bool既不是C中的类型也不是保留字。

但是,使用C ++编译器,您可能会收到解析错误。

我认为Stack Overflow的代码着色实际上为您找到了错误。 尽管ANSI C没有bool关键字(尽管C99确实将_Bool保留为关键字),但很可能您使用的编译器扩展了标准并定义了bool关键字,特别是因为它确实存在于C ++和其他C派生语言中。 解决方案很简单:要么强制您的编译器符合ANSI标准,要么只更改变量名称。

bool现在是C ++中的保留字,不能用作变量的名称。 写这本书时,bool不是C中的保留字,他们将它用作int变量的名称。

将来,请包含编译器的确切错误消息,以及您正在使用的开发环境的描述(Visual Studio,Eclipse,gcc,tcc,lcc-win等)。 知道你正在使用哪本书也会有所帮助; 关于C编程的非常简单的书籍是废话

我怀疑你是以某种方式将代码编译为C ++,而不是C,而bool是C ++中的保留字。 如果您使用的是Visual Studio,请确保文件扩展名为.c ,而不是.cpp

也许是因为bool是C ++编译器中的一种类型,它是一个保留字。 因此,它可能取决于您使用的编译器。