有关C和C++中的bool值的使用问题

本文介绍了一位开发者在使用C语言时遇到的问题:由于C语言本身不支持bool值,导致程序出现编译错误。文章给出了两种解决方案:一种是通过宏定义实现bool值;另一种是转换到C++中直接使用bool类型。

今天写了一个C小程序,可是怎么编译都有错误,不论是在GCC中还是VC还是eclipse,都有莫民奇妙的错误,仔细看后才发现,原来我使用了bool值,而在C语言中根本就没有这个值,所以会出错,解决办法是加上有关bool的宏定义即可:

#include <stdio.h>
#include <stdlib.h>
#define BOOL int
#define TRUE 1
#define FALSE 0

struct array
{
	int count;
	int size;
	char *pBase;
};
void init_arr (struct array *pArr,int number);
void show_arr (const struct array *pArr);
BOOL is_empty (const struct array *pArr);

int main (void)
{
	struct array arr;

	init_arr (&arr,10);
	show_arr (&arr);

	return 0;	
}
void init_arr (struct array *pArr,int number)
{
	pArr->pBase = (char *)malloc(sizeof(char)*number);
	if (NULL == pArr->pBase)
	{
		printf ("Memory allocation failed!\a\n");
		exit(EXIT_FAILURE);
	}
	else
	{
		pArr->size = number;
		pArr->count = 0;
	}
	
	return;
}
void show_arr (const struct array *pArr)
{
	int i;
	if ( is_empty(pArr) )
		printf ("Array is empty!\a\n");
	else
	{
		for (i=0;i<(pArr->count);i++)
			printf ("%c ",pArr->pBase[i]);
		printf ("\n");
	}
	
	return;
}
BOOL is_empty (const struct array *pArr)
{
	if (pArr->count == 0)
		return TRUE;
	else
		return FALSE;
}

而此前的代码在C++中运行完好,这是因为C++中定义了bool值,故而可以使用:

#include <stdio.h>
#include <stdlib.h>

struct array
{
	int count;
	int size;
	char *pBase;
};
void init_arr (struct array *pArr,int number);
void show_arr (const struct array *pArr);
bool is_empty (const struct array *pArr);

int main (void)
{
	struct array arr;

	init_arr (&arr,10);
	show_arr (&arr);

	return 0;	
}
void init_arr (struct array *pArr,int number)
{
	pArr->pBase = (char *)malloc(sizeof(char)*number);
	if (NULL == pArr->pBase)
	{
		printf ("Memory allocation failed!\a\n");
		exit(EXIT_FAILURE);
	}
	else
	{
		pArr->size = number;
		pArr->count = 0;
	}
	
	return;
}
void show_arr (const  struct array *pArr)
{
	int i;
	if ( is_empty(pArr) )
		printf ("Array is empty!\a\n");
	else
	{
		for (i=0;i<(pArr->count);i++)
			printf ("%c ",pArr->pBase[i]);
		printf ("\n");
	}
	
	return;
}
bool is_empty (const struct array *pArr)
{
	if (pArr->count == 0)
		return true;
	else
		return false;
}

这是个简单的问题,不错如果不知道的话,还真是个苦恼的问题呢!!


C++中,BOOLbool存在多方面的区别: - **类型不同**:bool是标准C++基本数据类型,属于布尔型;而BOOL是微软在VC++中定义的“typedef int BOOL”,本质是int类型。C语言中没有bool类型,BOOL的定义是为了解决程序在C与C++中环境的差异 [^1]。 - **取不同**:bool的取只有falsetrue,任何非零转换为true,零转换为false,字面truefalse都可以通过提升转换为int类型,true被转换为1,而false被转换为0;BOOL是三逻辑,即TRUE/FALSE/ERROR,返回为1为TRUE,0为FALSE,ERROR具体要看宏定义,通常为 -1,并且BOOL可能既不等于FALSE,也不等于TRUE,例如BOOL val = 2 [^1]。 - **长度不同**:bool单独占一个字节,如果多个bool对象排列在一起,可能会各占一个bit,这取决于编译器;BOOL与int长度相同 [^1]。 - **使用场景建议不同**:如果是写标准的C++,建议全用bool;如果是写vc++,一种观点是尽量使用BOOL,避免转换产生的性能警告,但也有观点认为写vc++也尽量使用bool使用BOOL做真假判断容易出错,若要用BOOL做返回,可用int或BYTE代替。Win32 API中很多返回BOOL的函数采用三逻辑,比如GetMessage,BOOL类型判断真假,通常只与FALSE比较 [^1]。 以下是简单的代码示例来体现二者的差异: ```cpp #include <iostream> // 为了使用BOOL类型 #include <windows.h> int main() { // bool类型 bool boolVar1 = -100; // 非零转换为true bool boolVar2 = 0; // 零转换为false std::cout << "boolVar1: " << boolVar1 << std::endl; std::cout << "boolVar2: " << boolVar2 << std::endl; // BOOL类型 BOOL boolVar3 = 2; if (boolVar3 != FALSE) { std::cout << "BOOL variable is not FALSE" << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值