#include #include #include void doit(int, double, unsigned int); void vait(unsigned int, ...); void *ptfn(void *); void doit2(int, int); void vait2(int, ...); void *ptfn2(void *); int main() { pthread_t pt1; double d1 = 1.234; printf("Without threads: \n"); ptfn((void *)&d1); printf("\n"); fflush(stdout); printf("With threads: \n"); pthread_create(&pt1, NULL, ptfn, &d1); printf("\n"); fflush(stdout); pthread_exit(0); return 0; } void *ptfn(void *x) { char ar[16]; unsigned int decimals = 5; double d = *(double *)x; doit(1, d, decimals); vait(decimals, d); } void doit(int x, double d, unsigned int ui) { char buff[331]; sprintf(buff,"double: %.*f",ui,d); printf("%s\n", buff); } void vait(unsigned int ui, ...) { double d=-10.0; va_list va; va_start(va, ui); printf("double before va_arg: %f\n", d); d = va_arg(va, double); printf("double after va_arg: %f\n", d); va_end(va); doit(1, d, ui); }