Boost logo

Boost :

From: Karl Nelson (kenelson_at_[hidden])
Date: 2002-02-11 14:00:05

> From: James Kanze [mailto:kanze_at_[hidden]]
> >
> > There's not just a problem of code compatibility; there's user
> > compatibility. People know printf; any new format, they'd have to
> > learn. If there are strong reasons for abandonning printf
> > format, then
> > it should certainly be done, but it shouldn't be done on a whim.
> Don't lump everyone into the same state. I've used printf() in the past,
> but I never used it extensively, and I always had to look up anything but
> the most basic format specifiers. Even today, when I find it necessary to
> use a printf() variant, I often try to use %i instead of %d for an integer.
> There are increasing numbers of C++ programmers that have rarely or never
> used printf(); they were weaned on IOStreams.

I would never attempt to argue that the letter assigned to printf
make much sense, but then unless we want a very verbose format
string they can't be less than cryptic.

Does this really add a whole lot of value
  cout << format("%{1:hex,width=10,pad=0} %{2:dec}")(a)(b);
  cout << format("%010x %d")(a)(b);

(Mind you I suggest the %{} because they are backwards compatible
allowing format("%s %{hex,width=10,pad=0}"))

However, no matter what format has been suggested if it has got
some level of format specifiers you immediately have to have the
programmer potentially look at a table to see what is supported.

> Given that by no means does everyone "know printf," abandoning print() is
> not at all unreasonable, even on a whim. (Ok, not just on a whim, but I
> would have absolutely no problem with totally abandoning the printf() format
> specifiers for something less cryptic, equally capable, with type safety.

Abandoning printf on a whim is unreasonable. It is a standard and
thus deviating from it means imposing some new standard. Creating
standards on a whim is what Microsoft does.

The arguments for using printf are that
  - it is known by a reasonable large group of C/C++ programmers

  - the format specifier is stardardized by both Unix and C.

  - it appears already in C++ in the form std::printf and friends

  - using multiple standards in a translation database is likely
    to lead to errors and difficulties for translators who
    may not be viewing the source code.


Boost list run by bdawes at, gregod at, cpdaniel at, john at