于 2012/7/4 23:46, niXman 写道:
> The following code gives the right result when compiled without
> defined __USE_MINGW_ANSI_STDIO macro.
> But, if __USE_MINGW_ANSI_STDIO macro is defined - the result is 6.
> Why?
>
> code:
> #include <stdio.h>
> int main() {
>      wchar_t buf[2];
>      int len = snwprintf(buf, sizeof(buf) / 2, L"world!");
>      printf("%d\n", len);
> }
>
>
> Thanks.
>
>
Without the macro, it will hit the code

#if !defined (__USE_MINGW_ANSI_STDIO) || __USE_MINGW_ANSI_STDIO == 0
#pragma push_macro("snwprintf")
#pragma push_macro("vsnwprintf")
# undef snwprintf
# undef vsnwprintf
   int __cdecl __ms_snwprintf (wchar_t * __restrict__ s, size_t n, const 
wchar_t * __restrict__ format, ...);
   int __cdecl __ms_vsnwprintf (wchar_t * __restrict__ , size_t, const 
wchar_t * __restrict__ , va_list);
   __mingw_ovr
   int snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * 
__restrict__ format, ...)
   {
     int r;
     va_list argp;
     __builtin_va_start (argp, format);
     r = _vsnwprintf (s, n, format, argp);
     __builtin_va_end (argp);
     return r;
   }

It will call ms's _vsnwprintf



With the macro, it will hit the code

#ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
__mingw_ovr
/* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ 
__MINGW_ATTRIB_NONNULL(3)
int snwprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...)
{
   register int __retval;
   __builtin_va_list __local_argv; __builtin_va_start( __local_argv, 
__format );
   __retval = __mingw_vsnwprintf( __stream, __n, __format, __local_argv );
   __builtin_va_end( __local_argv );
   return __retval;
}


It will call __mingw_vsnwprintf



Maybe someone can explain it here.


-- 
Best Regards,
xunxun


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to