1

在下面的代码中使用 bool 变量而不是 int 来设置值 1 或 0 有什么好处?它有什么区别?

#include<stdio.h>
int main(void)
{
    int p,d;
    _Bool isPrime;

    for ( p = 2; p <= 50; p++){
        isPrime = 1;

        for (d = 2; d < p; d++)
            if (p %d == 0)
                isPrime = 0;

        if (isPrime != 0)
            printf("%i ",p);
    }

    printf("\n");
    return 0;
}
4

2 回答 2

3

这对于明确您的意图很有用。当您将变量声明为Bool_时,很明显它不应该具有除trueand以外的值false

编写示例代码的更传统方法是:

#包括

int main(void)
{
    for (int p = 2; p <= 50; p++) {
        bool isPrime = true;

        for (int d = 2; d < p; d++) {
            if (p % d == 0) isPrime = false;
        }

        if (!isPrime) printf("%i ", p);
    }

    printf("\n");
    return 0;
}
于 2012-11-15T01:08:53.843 回答
2

我只是使用纯整数作为我的布尔类型,没有任何类型定义或特殊定义或真/假值的枚举。如果您按照我下面的建议从不与布尔常量进行比较,那么您只需要使用 0/1 来初始化标志。然而,在当今时代,这种做法可能被认为过于反动。在这种情况下,绝对应该使用它,因为它至少具有标准化的好处。

无论调用什么布尔常量,仅将它们用于初始化。永远不要写类似的东西

if (ready == TRUE) ...
while (empty == FALSE) ...

这些总是可以用更清晰的来代替

if (ready) ... while (!empty) ... 请注意,这些实际上可以合理且可以理解地大声读出。

给你的布尔变量正名,即full而不是notfull。后者导致代码难以阅读。比较

if (full) ...
if (!full) ...

if (!notfull) ...
if (notfull) ...

前一对读起来很自然,而 !notfull 即使是这样读起来也很尴尬,并且在更复杂的布尔表达式中变得更糟。

通常应避免使用布尔参数。考虑这样定义的函数

void foo(bool option) { ... }

在函数体内,参数的含义非常清楚,因为它有一个方便且有意义的名称。但是,呼叫站点看起来像

foo(TRUE);
foo(FALSE):

在这里,如果不总是查看函数定义或声明,基本上不可能知道参数的含义,如果添加更多布尔参数,情况会变得更糟。我建议要么

typedef enum { OPT_ON, OPT_OFF } foo_option;
void foo(foo_option option);

或者

#define OPT_ON true
#define OPT_OFF false
void foo(bool option) { ... }

无论哪种情况,呼叫站点现在看起来像

foo(OPT_ON);
foo(OPT_OFF);

读者至少有机会理解,而无需挖掘 foo 的定义。

于 2012-11-15T01:06:33.060 回答