Re: Origins of == in C

David Toland <>
Thu, 3 Aug 1995 15:02:31 GMT

          From comp.compilers

Related articles
Origins of == in C (1995-07-20)
Re: Origins of == in C (Doug CHAPPELL) (1995-07-25)
Re: Origins of == in C (Brendan Gowing) (1995-07-26)
Re: Origins of == in C (1995-07-28)
Re: Origins of == in C (1995-07-31)
Re: Origins of == in C (1995-08-01)
Re: Origins of == in C (David Toland) (1995-08-03)
Re: Origins of == in C (Bas V._de Bakker) (1995-08-09)
| List of all articles for this month |

Newsgroups: comp.compilers
From: David Toland <>
Keywords: C, design
Organization: Compilers Central
References: 95-07-158
Date: Thu, 3 Aug 1995 15:02:31 GMT

Brendan Gowing <> writes:
> However, I think that a more intrinsic problem raised by C's "=" and
> "==" is the fact that C grammar treats both as operators in an
> expression. If this were not the case and "=" was constrained to use
> in a statement, then C compilers could spot a lot of the problems that
> you are encountering.

I've long felt that the real problem is not that "=" is an operator
and therefore useable in arbitrary expressions. Indeed that is part
of the expressive *power* of C and C++.

Instead, I think much more type safety and syntax checking could have been
had at the cost of a little more text in some places by having a boolean
type as part of the language, and requiring a boolean expression in
the test expression of for, while, if, and do...while constructs.
In this way,

if (a = b)

Would be diagnosed as an invalid construct. If what was really intended
was to assign b to a and test for 0, then it wouild be coded as:

if ((a = b) != 0)


if ((bool)(a = b))

I am also assuming that a boolean type would be an integer type, of size
typically the same as a char. Whether it could hold nonzero values other
than 1 could be implementation-defined, but a boolean operator would only
return a 0 or a 1.

Obviously it is too late to add that to the language at this point, but
I believe that had it been there from the beginning it would have eliminated
an all too common source of error without crippling the language.

-- |
(Dave Toland) |
[Wizard C, the predecessor of Turbo C, had an optional warning whenever
the top-level operator in an if or while was = and it was quite useful.
Being a lazy typist, I took to writing if(!!(a = b)) { ... -John]


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.