Re: Cannot compile with _FILE_OFFSET_BITS = 64
- From: Harald van Dijk <truedfx@xxxxxxxxx>
- Date: Mon, 31 Dec 2007 18:20:07 +0100
On Mon, 31 Dec 2007 11:55:18 -0500, Joe Wright wrote:
Ulrich Eckhardt wrote:
Richard Tobin wrote:You presume the first expression (4) will be evaluated before the last
In article <5truv2F1f3un6U1@xxxxxxxxxxxxxxxxx>, Ulrich Eckhardt
<doomster@xxxxxxxx> wrote:
Casting the expression won't help, if it's already overflowed as anlseek64(fd, 4*1024*1024*1024, SEEK_SET) // integer overflowOthers 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.
int.
Argh, well caught. Casting the first constant in above expression does
the job though.
(1024). Why?
(off_t)4*1024*1024*1024
is equivalent to
(((((off_t)4)*1024)*1024)*1024)
regardless of which constant is evaluated first. The compiler is
certainly allowed to evaluate the expression right-to-left (or any other
order), but the last 1024 is multiplied by an expression of type off_t,
so the multiplication still happens in off_t arithmetic.
.
- References:
- Re: Cannot compile with _FILE_OFFSET_BITS = 64
- From: Ulrich Eckhardt
- Re: Cannot compile with _FILE_OFFSET_BITS = 64
- From: Richard Tobin
- Re: Cannot compile with _FILE_OFFSET_BITS = 64
- From: Ulrich Eckhardt
- Re: Cannot compile with _FILE_OFFSET_BITS = 64
- From: Joe Wright
- Re: Cannot compile with _FILE_OFFSET_BITS = 64
- Prev by Date: Re: Table based programming.
- Next by Date: Re: Redirect stdin ?
- Previous by thread: Re: Cannot compile with _FILE_OFFSET_BITS = 64
- Next by thread: Re: Cannot compile with _FILE_OFFSET_BITS = 64
- Index(es):
Relevant Pages
|