From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Mon Jan  3 18:15:20 2022
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Mon, 3 Jan 2022 18:15:20 +0100
Subject: [Rd] "getOption(max.print) omitted %d entries" may be negative
In-Reply-To: <CAJmOi+MFUrn+hx9PVj1ALWwMFPq518dTYGPDToqF92TB4w9xgw@mail.gmail.com>
References: <CAJmOi+MFUrn+hx9PVj1ALWwMFPq518dTYGPDToqF92TB4w9xgw@mail.gmail.com>
Message-ID: <25043.12072.659723.752755@stat.math.ethz.ch>

>>>>> Hugh Parsonage 
>>>>>     on Wed, 29 Dec 2021 00:36:51 +1100 writes:

    > In src/main/printvector.c in the definition of printVector and
    > printNamedVector  (and elsewhere):

    > Rprintf(" [ reached getOption(\"max.print\") -- omitted %d entries ]\n",
    >         n - n_pr);

    > Though n - n_pr is of type R_xlen_t so may not be representable as
    > int. In practice negative values may be observed for long vectors.

    > Rprintf(" [ reached getOption(\"max.print\") -- omitted %lld entries ]\n",
    >         n - n_pr);


Thank you Hugh, for finding and reporting this,
including a proposed remedy. 

At some point in time, I think the   %lld   format specifier was
not portable enough to all versions of C compiler / libraries
that were considered valid for compiling R.

See e.g.,

   https://stackoverflow.com/questions/462345/format-specifier-for-long-long

which says that "it" does not work on Windows.

Maybe this has changed now that we require C99 and also that
since R version 4.0.0 (or 4.0.1) we also use a somewhat more
recent version of gcc also on Windows?

... ah, searching the R sources reveals uses of %lld
*plus*

#ifdef Win32
#include <trioremap.h> /* for %lld */
#endif

so it seems we can and should probably change this ...

[Please, C  compiler / library standard experts, chime in !]

Martin Maechler
ETH Zurich  and  R core team



[Rd] "getOption(max.print) omitted %d entries" may be negative
Martin Maechler