[OPEN-ILS-DEV] C nits: invalid conversion specification
Scott McKellar
mck9 at swbell.net
Mon May 7 13:16:23 EDT 2007
What is your basis for saying that Perl accepts "%lf" for printf
and sprintf?
I looked at the link you provided, and I looked in the camel book
(which has much of the same verbiage), and I don't see any indication
that "%lf" is valid in Perl.
Given that Perl relies on the C library to format floating point
numbers, one of three things must be happening:
1. Perl silently removes the extraneous 'l' before passing the
conversion specification to the C library, or:
2. It doesn't, and whatever happens happens, depending on what the
C library does on a give platform, or:
3. It issues an error or warning message, and possibly takes either
of the above actions as well.
I just experimented with a test script using "%lf" and perl didn't
complain, even with the -w option. So the third possibility above
appears not to be happening.
In any case, it seems like there's no good reason to use "%lf" in
Perl, any more than in C.
Disclaimer: my knowledge of Perl doesn't extend much beyond how to
spell it.
Scott McKellar
http://home.swbell.net/mck9/aargh/
--- Joe Atzberger <atzberger at MECDC.ORG> wrote:
> Perl accepts "%lf" as an accepted format for printf and sprintf. It
> would only be particularly meaningful on a system
> where the default size of a floating point number was not long double
> (i.e., double or quad).
>
> From perldoc:
> http://perldoc.perl.org/functions/sprintf.html
> "For floating point conversions (e f g E F G), numbers are usually
> assumed to be the default floating point size on
> your platform (double or long double), but you can force 'long
> double' with q, L , or ll if your platform supports them."
>
> Interestingly, this may conflict with the fact that perl's sprintf
> actually invokes the C version for floating point
> numbers:
> "Perl does its own sprintf formatting--it emulates the C function
> sprintf, but it doesn't use it (*except for
> floating-point numbers*, and even then only the standard modifiers
> are allowed)."
>
> So based on that, I'm more confused than anything. It seems like it
> should only be a question of what the C version
> supports for floats, even if perl doesn't report a warning/error.
>
> --Joe Atzberger
> INFOhio Technical Specialist
> Metropolitan Educational Council
> (614) 473-8300 x22
> atzberger at mecdc.org
<snip>
More information about the Open-ils-dev
mailing list