【问题标题】:Boolean - Optimized bool布尔 - 优化的布尔
【发布时间】:2013-02-01 07:37:35
【问题描述】:

传统上,C 直到 C99 才定义布尔值。因此,搜索头文件以了解创建布尔值的优化方法是:

Windows.h [Microsoft C++]
---------
typedef int                 BOOL;

//false
#ifndef FALSE
    #define FALSE               0
#endif

//true
#ifndef TRUE
   #define TRUE                1
#endif

在 Tipo Booleano C 中定义

#if (__BORLANDC__ <= 0x460) || !defined(__cplusplus)
    typedef enum { false, true } bool;
#endif

由 c-faq.com 第 9 节提供

typedef enum {false, true} bool;

在 objc.h 中,布尔值定义为:

typedef signed char     BOOL; 
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
// even if -funsigned-char is used.
#define OBJC_BOOL_DEFINED

#define YES             (BOOL)1
#define NO              (BOOL)0

在stackoverflow.com上回答一些问题

typedef enum { False = 0, True = 1 } Bool;
#define bool Bool
#define true True
#define false False

哪一种是最优化的方式?

【问题讨论】:

  • 在内存使用、速度、便携性等方面进行了优化...?
  • @alk 是的,在各个方面都经过优化。
  • 为什么你有两个配置文件?他们俩都问同样的问题?

标签: c gcc cross-platform boolean visual-c++-6


【解决方案1】:

如果您使用 C89,我会使用以下定义:

#define true 1
#define false 0
typedef unsigned char bool;

出于内存原因,_Bool 通常是 1 字节宽的类型。而在 C99 中,_Bool 是无符号类型。

我个人不喜欢将bool 定义为枚举,因为枚举是实现定义的类型,而枚举常量始终是int

现在,如果您希望速度胜过内存,您应该考虑使用与您的处理器字长相匹配的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多