This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: help on inconsistent printf() warning from gcc


On 10/31/2014 01:13 PM, Craig Howland wrote:
> 
> On 10/31/2014 02:49 PM, Joel Sherrill wrote:
>> Hi
>>
>> ...
>>
>> I have attached correct and incorrect test cases. I am hoping
>> someone here can give me a clue as to where to look. I am
>> wondering if this is an inconsistency across targets in the
>> C library. I did file this as GCC PR63301 but it was quickly
>> closed as invalid. But I think the inconsistent generation of
>> warnings is a bug.
> Not that this changes the behavior, but the test cases are labeled
> backwards.  After applying the wchar_t-to win_t correction that Myers
> points out, the correct format is %lc (per C99), while %C is non-standard.

Wrong.  Per POSIX, %C is identical to C99's %lc:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html

However, your examples are also doing it wrong.  Re-read the %lc
description:

%c
    If an l (ell) qualifier is present, the wint_t argument shall be
converted as if by an ls conversion specification with no precision and
an argument that points to a two-element array of type wchar_t, the
first element of which contains the wint_t argument to the ls conversion
specification and the second element contains a null wide character.

You weren't passing a NUL-terminated wint_t array:

  wchar_t wc= L'a';
  printf("%C", wc);

Correct usage would look more like:

  wint_t wc[2] = L"a";
  printf("%C", wc);

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]