【问题标题】:Writing a function in C that returns a boolean用 C 编写一个返回布尔值的函数
【发布时间】:2011-06-12 18:51:12
【问题描述】:

由于 C 没有布尔类型,我如何在 C 中编写这样的函数:

bool checkNumber()
{
   return false;
}

【问题讨论】:

  • #define false 0 #define true 1 如果它让你有宾至如归的感觉

标签: c boolean stdbool


【解决方案1】:

如果您不使用 C99,并确定需要添加自己的布尔类型,请确保给它自己的名称。 使用 'bool' 或 'BOOL' 只会在包含 3rd 方库时给您带来麻烦。 唯一的例外是使用以下事实标准:

#define BOOL int
#define TRUE 1
#define FALSE 0

但请确保将它们包装在#ifndef 中。但请注意,某些库确实使用 'char' 作为 BOOL。 如果您有 C++ 背景,请考虑是否要与 C++ 互操作。

【讨论】:

    【解决方案2】:

    您可以使用定义来避免将整数和 1 和 0 直接用于布尔逻辑。

    #define BOOL char
    #define TRUE 1
    #define FALSE 0
    

    我为 BOOL 选择了 char,因为它只有 1 个字节而不是 4 个。(对于大多数系统)

    【讨论】:

    • 最好用枚举而不是依赖预处理器来做这种事情 - 它更健壮,更适合调试(你得到符号而不是文字常量) - 请参阅@templatetypedef 的答案.
    • 这种废话通常会导致像if (var == TRUE)这样的代码。要么使用带有布尔语义的 C99 _Bool,要么使用 int 并且不编写任何相等表达式,而是简单地使用 if (var)if (!var)
    • 这个问题的另一个问题是,几乎您可能使用过的每个第三方库头文件都会随意定义与这些类似或相同的宏标识符(例如 windows.h)。
    【解决方案3】:

    bool 类型在 <stdbool.h> 标头中定义,否则可在名称 _Bool 下使用(假设您使用的是 C99 编译器)。如果你没有 C99,你总是可以像这样发明自己的 bool 类型:

    typedef enum {false, true} bool;
    

    【讨论】:

    • 值得将其包装在 #if !defined __cplusplus ... #endif 以实现互操作性。
    【解决方案4】:

    int 在 C 中通常用作布尔值,至少在 C99 之前是这样。零表示假,非零表示真。

    【讨论】:

    • 确实 - int checkNumber(void) { return 0; } 是惯用的 C。
    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2013-03-18
    • 2014-07-13
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多