On 8/2/2019 5:05 PM, Denis Vnoukov wrote: > Code Example: > #include <stdlib.h> > #include <stdio.h> > #include <sys/select.h> > #include <windows.h> > #include <stdint.h> > #include <intrin.h>int main() > { > // https://github.com/msys2/MSYS2-packages/issues/1711 > char buf[50]; > char * str = gcvt(3.141592653589793238462643383279502884197169399375, 49, > buf); > printf("buffer: %s", str);// > https://github.com/msys2/MSYS2-packages/issues/1270 > fd_set read_fd; > FD_ZERO(&read_fd);GetTickCount64();// > https://github.com/msys2/MSYS2-packages/issues/1262 > unsigned long index; > uint64_t b = 0xbedabedadeadc0de; > _BitScanForward64(&index, b); > _BitScanReverse64(&index, b);return 0; > } > If we compile it with gcc as .c: > $ gcc main.c > main.c: In function ‘main’: > main.c:16:15: warning: implicit declaration of function ‘gcvt’ > [-Wimplicit-function-declaration] > char * str = gcvt(3.141592653589793238462643383279502884197169399375, 49, > buf); > ^~~~ > main.c:16:15: warning: initialization makes pointer from integer without a > cast > [-Wint-conversion] > main.c:23:2: warning: implicit declaration of function ‘GetTickCount64’; did > you > mean ‘GetTickCount’? [-Wimplicit-function-declaration] > GetTickCount64(); > ^~~~~~~~~~~~~~ > GetTickCount > main.c:28:20: warning: passing argument 1 of ‘_BitScanForward64’ from > incompatible pointer type [-Wincompatible-pointer-types] > _BitScanForward64(&index, b); > ^ > In file included from /usr/include/w32api/winnt.h:27:0, > from /usr/include/w32api/minwindef.h:163, > from /usr/include/w32api/windef.h:8, > from /usr/include/w32api/windows.h:69, > from main.c:8: > /usr/include/w32api/psdk_inc/intrin-impl.h:749:1: note: expected ‘unsigned > int *’ > but argument is of type ‘long unsigned int *’ > __buildbitscan(_BitScanForward64, unsigned __int64, "bsf{q %[Mask],%[Index] | > %[Index],%[Mask]}") > ^ > main.c:29:20: warning: passing argument 1 of ‘_BitScanReverse64’ from > incompatible pointer type [-Wincompatible-pointer-types] > _BitScanReverse64(&index, b); > ^ > In file included from /usr/include/w32api/winnt.h:27:0, > from /usr/include/w32api/minwindef.h:163, > from /usr/include/w32api/windef.h:8, > from /usr/include/w32api/windows.h:69, > from main.c:8: > /usr/include/w32api/psdk_inc/intrin-impl.h:756:1: note: expected ‘unsigned > int *’ > but argument is of type ‘long unsigned int *’ > __buildbitscan(_BitScanReverse64, unsigned __int64, "bsr{q %[Mask],%[Index] | > %[Index],%[Mask]}") > ^ > So... > 1. gcvt function must be into stdlib.h, but we have a warning
The Linux man page for gcvt says, "Marked as LEGACY in POSIX.1-2001. POSIX.1-2008 removes the specification of gcvt(), recommending the use of sprintf(3) instead (though snprintf(3) may be preferable)." Cygwin's stdlib.h is consistent with this. It guards the declaration of gcvt with #if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112 If you really need to use gcvt, I think you probably have to #define _XOPEN_SOURCE to be 500. (I haven't tested this.) > 2. gcvt function in all standards has declaration like:char *gcvt(double > number, > int ndigit, char *buf);but we have a warning about "int-conversion" and get > core > dump on line:printf("buffer: %s", str); This is a consequence of the fact that gcvt hasn't been declared. I haven't looked at the rest of the warnings/errors in your message, but I suspect you can figure out the causes yourself by looking at the relevant headers and/or by looking at the result of preprocessing. You might also find the following helpful: https://cygwin.com/faq.html#faq.programming.64bitporting Ken