Я только что запустил C совсем недавно, и меня попросили ответить на некоторые упражнения кодирования, в которых появляется следующая часть кода:
typedef enum {
false = 0,
true = 1
} Bool;
Кто-то мог дать резюме и очистить объяснение этому?
Большое спасибо.
На самом деле он делает две вещи; вы можете разбить его примерно так:
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;
}
Поскольку 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;
}
Предоставляет читаемые литералы для истинного и ложного. Но вы могли догадаться об этом.
Как это работает? Перечисление (ключевое слово 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, ноль ложно, все остальное верно, интерпретация будет второй натурой.
Перечисление - это целочисленный тип, который имеет ограниченное количество символьных значений. Это позволяет вам делать такие вещи, как:
Bool finish = false;
while (finish != true)
{
...
}
Из того, что я помню:
Это объявляет перечисление, а затем связывает имя Bool с этим перечислением ( через typedef ). Вы можете получить дополнительную информацию о перечислениях C здесь
Это просто определение перечисления, типа, который может принимать только дискретное количество значений, то есть тех, которые заключены в эти скобки. Каждому из этих значений дается имя, которое позже вы можете использовать для его обозначения. Если вы укажете только имя значений, а не фактическое значение, компилятор установит их для вас в порядке возрастания, начиная с нуля для первого элемента.
Дополнительную информацию см. В статье вики о перечисляемых типах (и, в частности, в разделе 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;