Re: Cannot compile with _FILE_OFFSET_BITS = 64





Joe Wright wrote:
Ulrich Eckhardt wrote:
Richard Tobin wrote:
In article <5truv2F1f3un6U1@xxxxxxxxxxxxxxxxx>,
Ulrich Eckhardt <doomster@xxxxxxxx> wrote:

lseek64(fd, 4*1024*1024*1024, SEEK_SET) // integer overflow
Others already explained what is happening, but I'd suggest another
approach that works without C99's long long type simply cast the
expression to off_t, which will automatically be the correct 64 bit type,
regardless of whether you use C89 or C99.
Casting the expression won't help, if it's already overflowed as an
int.

Argh, well caught. Casting the first constant in above expression does the
job though.

Uli

You presume the first expression (4) will be evaluated before the last
(1024). Why?

He is making no assumptions about the order of evaluation of the
numeric literals. His statement is based upon the assumption, mandated
by the C grammar, that the multiplication expressions be evaluated in
order from left to right. It is those multiplications that require
type conversions, where needed to bring both sides to a common type,
and making sure that the first multiplication involves an operand that
is large enough to store the final result is sufficient to ensure that
all of the calculations are performed without overflow.

.



Relevant Pages

  • Re: Ada.Strings.Bounded
    ... performing overflow checks. ... static expressions are evaluated as universal_integer, ... implicitly converted to various integer types. ... The evaluation happens purely mathematically, ...
    (comp.lang.ada)
  • Re: operator precedence with && and comma
    ... >> CBFalconer wrote: ... >>> will overflow if the addition precedes the subtraction. ... > order of evaluation, and the compiler is free to generate code in ...
    (comp.lang.c)
  • Re: detecting twos complement arithmetics
    ... > "If during the evaluation of an expression, ... If it overflows at compile time, ... unsigned integers must use modular arithmetics, so they cannot overflow, the ...
    (microsoft.public.vc.language)