On Thu, Oct 7, 2010 at 8:05 AM, Rémy Oudompheng <remyoudompheng@gmail.com> wrote:
Allan McRae <allan@archlinux.org> wrote:
On 07/10/10 22:50, Dan McGee wrote:
On Wed, Oct 6, 2010 at 8:40 PM, Allan McRae<allan@archlinux.org> wrote:
man printf(3): l (ell) A following integer conversion corresponds to a long int or unsigned long int argument, or a following n conversion corre‐ sponds to a pointer to a long int argument, or a following c conversion corresponds to a wint_t argument, or a following s con‐ version corresponds to a pointer to wchar_t argument.
So we should really be using '%lc', it sounds like clang is busted...
What does printf("%ls", p) give you? This isn't actually right because we don't want to print the full string, just one character, but it would be interesting to see if they implemented half of the spec.
Same error with %ls.
util.c:264:13: error: conversion specifies type 'int *' but the argument has type 'wint_t' (aka 'unsigned int') [-Wformat] printf("%ls", (wint_t)*p); ~~^ ~~~~~~~~~~ %u 1 error generated.
I may be a C newbie, but is (wint_t)*p the same as (wint_t)(*p) ? It would explain the pointer/integer confusion.
printf("%ls", (wint_t)*p); != printf("%ls", p) And the mailing list message I mentioned seemed old enough that it should have snuck into clang 2.8... -Dan