[net.lang.c] type of long % int

guido@boring.UUCP (12/28/84)

Since the result of a%b can never exceed abs(b) in absolute value, it would
be reasonable that a%b gets the type of b, not of a.  This is more reasonable
in an example like this:

	fiddle(diskaddr) long diskaddr; {
		int offset= diskaddr%BUFSIZ;
		...
	}

where which lint currently complaints about a long to int assignment.

I can see only one disadvantage (besides it being a strange exception to
an otherwise simple rule: "the type  of the result of any arithmetic
operation is the type of the 'larger' operand"): it breaks programs that
say, for instance,

	/* Assume int a, b; */
	foobar((long)a%b); /* foobar requires a 'long' argument */

instead of

	foobar((long)(a%b));

which is better anyway because it casts at the right moment; but the former
is currently also correct (passes lint).

Any comments?  Ansi committee?

	Guido van Rossum, "Stamp Out BASIC" Committee, CWI, Amsterdam
	guido@boring.UUCP