-1

数か月前のインタビューで、C で boolean データ型を実装する方法を尋ねられました。最も一般的な 2 つの方法は次のいずれかです。

プリプロセッサ マクロ:

#define BOOL unsigned char

または typedef:

typedef BOOL unsigned char;

それで、プリプロセッサ マクロまたは typedef を使用することの正確な利点とトレードオフは何だろうと思っていました。私はよく、「uint16」(unsigned short の場合) や「ucharp」(unsigned char ポインターの場合) などのデータ型を作成しています。どちらを使用するのが最適でしょうか?

ありがとう。

4

1 に答える 1

2

最も自然な答えは、列挙型を定義することです。

typedef enum {false = 0, true} BOOL;

ただし、宣言したこの型は、C99 型とは少し異なる動作をすることに注意することが重要です(最も一般的には、で定義されたマクロを介して使用されます)。BOOL_Boolboolstdbool.h

例えば:

int main(void) {
    BOOL B;  // our type
    bool b;  // the type from C99

    B = -true; // -1
    b = -true; // 1

    B = true + true;  // 2
    b = true + true;  // 1

    return 0;
}

C99はブール代数boolのルールに従って動作しますが、make-doは通常の のように動作します。これは、タイプの変数が実際には.BOOLintenumint

boolC99 を使用している場合、この地球上で定義された を使用するのではなく、独自の型をロールする正当な理由はまったくありませんstdbool.h

enum残念ながら、以前の標準を使用している場合は、typedefで十分です。

于 2013-06-22T05:47:41.827 に答える