我使用的是VS 2010专业版。
首先,C语言没有bool类型?我只能使用带有0/1的int类型。这似乎很奇怪,因为大多数语言都认为布尔类型是一种标准类型。
此外,我有Visual Studio 2010 Pro,但是没有"C项目"选项。我只创建了一个空的C++项目。文件名以".c"结尾。
这样做会导致关键词出现问题(编辑器中bool被高亮显示/有效,但编译器不喜欢它)。
我尝试修复/添加组件,但它们只提供了C#,F#,C ++和Visual Basic;却没有C?
我使用的是VS 2010专业版。
首先,C语言没有bool类型?我只能使用带有0/1的int类型。这似乎很奇怪,因为大多数语言都认为布尔类型是一种标准类型。
此外,我有Visual Studio 2010 Pro,但是没有"C项目"选项。我只创建了一个空的C++项目。文件名以".c"结尾。
这样做会导致关键词出现问题(编辑器中bool被高亮显示/有效,但编译器不喜欢它)。
我尝试修复/添加组件,但它们只提供了C#,F#,C ++和Visual Basic;却没有C?
最新的 C 标准(C99)确实有 bool 类型。只需包含 stdbool.h
,就可以使用它。不幸的是,MSVC 对 C 的支持非常有限,仅支持部分 C89。
stdbool.h
。无论如何,OP正在使用不支持C语言,更不用说“最新C标准”的MSVC。 - R.. GitHub STOP HELPING ICEwprintf(L"%s", "hello world\n");
是C语言的一部分,无法在MSVC上运行。 - R.. GitHub STOP HELPING ICEbool
的类型(实际上是_Bool
,但包括stdbool.h
会为其声明一个typedef
别名bool
),但由于你正在使用MSVC,它对你不可用。无论如何,在C中使用布尔类型完全不符合惯用法,而且大多数情况下毫无用处。像其他人一样,只需使用int
即可。或者,如果需要一个巨大的布尔数组,请自己制作位数组实现。is*
函数也不会返回_Bool
。请勿使用非惯用语和无用语! - pmgshort
类型。 - Steve Jessop在C99之前,C语言没有真正的布尔类型。
因此,习惯用法上,C语言并不会使用布尔值符号或表达式(即,你不会看到很多针对“true”或“false”的显式测试)。相反,任何零值积分表达式或NULL指针将被评估为“false”,而任何非零值积分表达式或非NULL指针将被评估为“true”。因此,你会看到很多这样的代码:
foo *bar = malloc(sizeof *bar * ...);
if (bar) // equivalent to writing bar != NULL
{
// bar is non-NULL
}
关系和相等表达式,如a == b
或c < d
将计算出一个整数类型的值,其值为1(真)或0(假)。
有些人通过定义自己的TRUE或FALSE符号常量来引入它们,例如:
#define TRUE (1) // or (!FALSE), or (1==1), or...
#define FALSE (0) // or (!TRUE), or (1==0), or ...
不幸的是,有些人偶尔会拼错0或1(或者本应评估为0或1的表达式); 有一次,因为有人搞砸了并将标题放在了TRUE == FALSE的位置,我花了一个下午追寻自己的尾巴。
不巧的是,那一天我彻底停止使用符号常量来表示布尔值。
关于bool
类型的信息,请参见R.的答案。
不幸的是,当MSVC编译C代码时,它不支持C99 - 它只有一些零碎的功能(通常是C99库中C++所需的),但在大多数情况下,它仅支持C90。
至于编辑器中仍然突出显示bool
- MSVC的高亮功能可能很复杂,但它并不考虑区分C、C++和C++/CLI之间的区别。例如,如果您使用的是仅限CLI的构造,则即使您的项目与CLI无关,它也将被突出显示为CLI。
if ((ptr = malloc(sizeof(foo))) != 0) ...
可以缩短为:
if (ptr = malloc(sizeof(foo))) ...
C语言被设计成一种“中级”语言,即介于汇编语言和传统的“高级”语言之间。它也被设计成紧凑/简洁的语言。因此,它具有极简主义的风格,例如上述支持“速记”的方式,以及省略内置布尔数据类型(截至C99,正如其他人所指出的那样)。
许多库/框架(我知道的)都会做类似以下的事情:
#define BOOL int
#define FALSE 0
#define TRUE (!FALSE)
int a = 2; int b = 3;
,那么if (a)
和if (b)
都为true,但a
和b
不相等。#pragma once
#define false 0
#define true 1
#define bool int
我发现如果我尝试使用typedef
来定义bool
,Visual Studio 2010会报错。
bool
现在可以通过stdbool.h
支持。我不确定VS2012是否支持。 - Edward Brey