kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #43187
Re: Printing size_t on MSW (%zu)
After some tests:
printf("test %zu", size_t(1) );
works, and there is no compil warning.
Functions that generate a warning about %zu format are:
StrPrintf()
OUTPUTFORMATTER::Print()
(see richio.h)
they have the attribute:
__attribute__ ((format (printf, 2, 3)))
or
__attribute__ ((format (printf, 3, 4)))
And therefore GCC verify the format and the variable argument list, like
for a printf.
For some reason, %zu is seen as valid for printf, but not for functions
having the printf attribute.
Le 03/01/2020 à 16:16, Mark Roszko a écrit :
> wxWidgets has a interesting maze of macros to determine how to do
> printf on Windows. I wonder what it ends up doing. There is a special
> case just for MINGW32 but not MINGW64.
>
> https://github.com/wxWidgets/wxWidgets/blob/cc931612eec2e3ea49200ebff45042135f3c3f9c/include/wx/wxcrtvararg.h#L84
>
>
> On Fri, Jan 3, 2020 at 10:05 AM jp charras <jp.charras@xxxxxxxxxx> wrote:
>>
>> Le 03/01/2020 à 15:58, Jon Evans a écrit :
>>> So maybe it's a 32-bits vs 64-bits thing.
>>> If you add a line like
>>> #define __USE_MINGW_ANSI_STDIO 1
>>> at the top of that source file, does it work?
>>
>> No.
>> I still have the compil message:
>> warning: unknown conversion type character 'z' in format [-Wformat=]
>>
>>>
>>> On Fri, Jan 3, 2020 at 9:32 AM jp charras <jp.charras@xxxxxxxxxx
>>> <mailto:jp.charras@xxxxxxxxxx>> wrote:
>>>
>>> Le 03/01/2020 à 15:10, Jon Evans a écrit :
>>> > I found it defined in
>>> >
>>> C:\msys64\mingw64\include\c++\8.3.0\x86_64-w64-mingw32\bits\os_defines.h
>>> > on my machine.
>>> > @JP -- what platform did you use (Windows version / MSYS version /
>>> etc)
>>> > where you saw the issue?
>>>
>>> I confirm the %zu is not working on my install.
>>>
>>> m_out->Print( aNestLevel+1, "(drawings %zu)\n",
>>> aBoard->Drawings().size() );
>>>
>>> generates the warning:
>>> warning: unknown conversion type character 'z' in format [-Wformat=]
>>>
>>> on my install:
>>>
>>> Platform: Windows 7 (build 7601, Service Pack 1), 32 bit, Little endian,
>>> wxMSW
>>> Build Info:
>>> wxWidgets: 3.1.3 (wchar_t,wx containers)
>>> Boost: 1.71.0
>>> OpenCASCADE Community Edition: 6.8.0
>>> Curl: 7.66.0
>>> Compiler: GCC 9.2.0 with C++ ABI 1013
>>>
>>> And I never saw %zu working on my W7 32 bits install.
>>>
>>>
>>> >
>>> > On Fri, Jan 3, 2020 at 9:02 AM Seth Hillbrand <seth@xxxxxxxxxxxxx
>>> <mailto:seth@xxxxxxxxxxxxx>
>>> > <mailto:seth@xxxxxxxxxxxxx <mailto:seth@xxxxxxxxxxxxx>>> wrote:
>>> >
>>> > On 2020-01-02 17:19, Jon Evans wrote:
>>> >
>>> > > Hi all,
>>> > >
>>> > > Context:
>>> > >
>>> https://gitlab.com/kicad/code/kicad/merge_requests/28#note_264910682
>>> > >
>>> > > I have heard there are issues using "%zu" format specifier on
>>> > > Windows/mingw, because mingw links against a very old
>>> Windows library
>>> > > that does not support the C99 standard.
>>> > >
>>> > > I have also heard that this isn't an issue anymore because of
>>> > > __USE_MINGW_ANSI_STDIO in wxWidgets.
>>> > >
>>> > > I tried to reproduce this problem on my Windows 10 machine but
>>> > couldn't
>>> > > -- using %zu works fine.
>>> > >
>>> > > Does anyone know if this is still a problem on any of our
>>> supported
>>> > > platforms?
>>> > >
>>> > > Thanks,
>>> > > -Jon--
Jean-Pierre CHARRAS
Follow ups
References