CS362 2011F Compilers

Class 27: Type Checking (2) Type Equivalence

Back to Type Checking (1) Introduction. On to Midsemester Examination, Revisited.

This outline is also available in PDF.

Held: Wednesday, 2 November 2011

Summary: Today we continue to consider issues of type equivalence. That is, we explore when two types can be treated as equivalent for purposes of assignment and function/procedure calls.

Related Pages:

Notes:

Overview:

Why Type Check?

Fun with C

I thought you might enjoy this quote from Kernighan & Ritchie (2nd edition, p. 198).

Many operators cause conversions and yield result types in a similar way. The effect is to bring operands into a common type, which is also the type of the result. This pattern is called the usual arithmetic conversions

First, if either operand is a long double, the other operand is converted to a long double.

Otherwise, if either operand is a double, the other is converted to double.

Otherwise, if either operand is a float, the other is converted to float.

Otherwise, the integral promotions are performed on both operands; then, if either operand is unsigned long int, the other is converted to unsigned long int.

Otherwise, if one operand is long int and the other is unsigned int, the effect depends on whether a long int can represent all values of an unsigned int; if so, the unsigned int operand is converted to long int; if not, both are converted to unsigned long int.

Otherwise, if one operand is long int, the other is converted to long int.

Otherwise, if one operand is unsigned int, the other is converted to unsigned int.

Otherwise, both operands have type int.

Wasn't that fun? And it doesn't even deal with reals.

Type Equivalence: Subrange Types

Type Equivalence: Records

More Type Equivalence

Back to Type Checking (1) Introduction. On to Midsemester Examination, Revisited.

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Wed Dec 7 10:26:35 2011.
The source to the document was last modified on Fri Aug 26 13:03:12 2011.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS362/2011F/Outlines/outline.27.html.

Samuel A. Rebelsky, rebelsky@grinnell.edu