Лично мне немного надоело неявное преобразование из int в логическое значение.Я не думаю, что это добавляет много к языку C больше.В C89, где нет логического типа, совершенно разумно использовать целое число в качестве логического, и в этом случае преобразование приводит к красивому коду.Я понимаю, почему его нельзя удалить, особенно когда речь идет о библиотеках, которые по причинам совместимости нельзя изменить, чтобы они возвращали логическое значение, а теперь оно есть.Но я, конечно, не думаю, что его следует использовать во всех случаях.
Иногда целочисленное значение 0 означает «нет одного», но иногда оно означает «есть один, и он равен нулю».Так что я доволен:
users = get_number_of_users();
if (users) {
// there are users
...
} else {
// there aren't users
}
Я совсем не заинтересован в:
length = strlen(ptr);
if (length) {
// there is length? OK, sort of...
} else {
// there isn't length? No, wait, there *is* a length, that length is 0
}
Так что у вас есть прагматическая причина написать if (length == 0)
вместо if (!length)
,«Если не длина» не имеет смысла в английском , поэтому не обязательно то, что вы должны писать в коде.
По общему признанию, 0
был изобретен как специальный заполнительозначать "нет ни одного".Но осознание того, что во многих контекстах его можно рассматривать как число, как и любое другое, стало важным прорывом в истории математики, и я не думаю, что мы должны отказываться от этого только потому, что C предоставляет нам синтаксис для его повторного специального рассмотрения.;-) Если вы хотите знать, является ли число 5, вы сравниваете его с 5, и обычно я думаю, что то же самое должно быть для 0.