Actually, C did not define a boolean primitive type. Instead the convention was for 0 to be false and not-zero to be true. This is also true of a lot of other languages, and "not-zero" is therefore sometimes 1, sometimes -1, and occasionally, something even stranger.
However, the conditional expressions for if, while, and similar statements require a boolean
test even though the language may not support boolean data types. Hence, you get:
because the actual meaning of that expression is implicitly:
Which
is a boolean expression, since equality and inequality are boolean operators.
Or for the more abstractly-minded:
or even:
And incidentally, a long time ago I was involved with a BASIC-like language that actually had a "forever" statement defined as part of the language.