Легкий перечислимый вопрос C

Я только что запустил C совсем недавно, и меня попросили ответить на некоторые упражнения кодирования, в которых появляется следующая часть кода:

typedef enum {
  false = 0,
  true = 1
} Bool;

Кто-то мог дать резюме и очистить объяснение этому?

Большое спасибо.

5
задан dmckee 27 February 2010 в 19:22
поделиться

6 ответов

На самом деле он делает две вещи; вы можете разбить его примерно так:

enum _bool {
   false = 0,
   true = 1
};

И:

typedef enum _bool Bool;

Этот код создает новый тип перечисления, а затем использует typedef , чтобы дать ему удобное имя. Это позволит вам использовать новый «тип» с именем Bool в другом месте вашего кода и присвоить ему значения false и true . Вот простой пример использования:

Bool logical_not(Bool in)
{
    if (in == true)
        return false;
    else
        return true;
}
10
ответ дан 18 December 2019 в 09:49
поделиться

Поскольку C не имеет логического типа данных, ваш код имитирует его, используя typedef.

Вы можете использовать новый определяемый пользователем тип данных следующим образом:

Bool find_key_in_array() {
        Bool found = false; // assume not found.

        // do searching and set found suitably.    

        return found;
}

int main()  {

        Bool result = find_key_in_array();

        return 0;
}
1
ответ дан 18 December 2019 в 09:49
поделиться

Предоставляет читаемые литералы для истинного и ложного. Но вы могли догадаться об этом.

Как это работает? Перечисление (ключевое слово enum ) связывает серию лексем с целочисленными значениями, а typedef ... Bool; делает Bool типом перечисления.

В целом я бы не одобрил эту идиому, потому что позже у вас может возникнуть соблазн использовать

int flag=false;
// something happens that might change the setting of flag that *doesn't* use the enum
if (flag == true) {
   //...
}

, и если flag будет установлен в 2, это не будет делать то, что вы ожидаете.

Если вы долго используете c, ноль ложно, все остальное верно, интерпретация будет второй натурой.

1
ответ дан 18 December 2019 в 09:49
поделиться

Перечисление - это целочисленный тип, который имеет ограниченное количество символьных значений. Это позволяет вам делать такие вещи, как:

Bool finish = false;

while (finish != true)
{
    ...
}
1
ответ дан 18 December 2019 в 09:49
поделиться

Из того, что я помню:

Это объявляет перечисление, а затем связывает имя Bool с этим перечислением ( через typedef ). Вы можете получить дополнительную информацию о перечислениях C здесь

0
ответ дан 18 December 2019 в 09:49
поделиться

Это просто определение перечисления, типа, который может принимать только дискретное количество значений, то есть тех, которые заключены в эти скобки. Каждому из этих значений дается имя, которое позже вы можете использовать для его обозначения. Если вы укажете только имя значений, а не фактическое значение, компилятор установит их для вас в порядке возрастания, начиная с нуля для первого элемента.

Дополнительную информацию см. В статье вики о перечисляемых типах (и, в частности, в разделе C ).

Это конкретное перечисление определяет логический тип, то есть тип, который может принимать только два значения: true и false, где false =! True. Логические значения очень часто используются в программировании, например, как флаги, чтобы указать, выполняется ли условие, и на самом деле многие языки включают их как собственный тип (например, C ++ и C99).

Между прочим, для определения этого перечисления достаточно этого:

enum Bool
{
    false = 0,
    true = 1
};

; однако из-за того, как C был разработан для объявления переменной типа Bool с помощью этого кода, вам нужно всегда ставить ключевое слово enum перед Bool:

enum Bool myFlag=true;

Вместо этого, используя уловку typedef, вы определяете анонимное перечисление, созданное таким образом, а затем вы предоставляете ему псевдоним с именем Bool; таким образом вы можете просто сделать:

Bool myFlag=true;
4
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: