/* * main.c - integration-fixture entry point (plan todo 26). * * A REAL C23 program exercising both fixture features end to end: * - pthread: pthread_create()/pthread_join() run a worker thread (guarded * by the HAVE_PTHREAD define the generated config.h wrote), printing a * grep-able marker the runner asserts on; * - math: sin(0.5) from libm, printed with a fixed format the runner * greps (the link would fail without -lm, so a successful run proves * the LIBS accumulation reached the Makefile). * * _POSIX_C_SOURCE must be defined BEFORE the first include: under strict * -std=c23 glibc sets __STRICT_ANSI__ and hides pthread_create's * declaration, which C23 turns into an implicit-declaration ERROR * (the same trap recorded for src/ in the project learnings). */ #ifndef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200809L #endif #include "config.h" #include "demo.h" #include #include #include #ifdef HAVE_PTHREAD #include static void * worker(void *arg) { (void)arg; printf("worker thread ran\n"); return NULL; } #endif int main(void) { double s = sin(0.5); printf("hellothreads demo: sin(0.5) = %.4f\n", s); printf("demo_compute(2) = %d\n", demo_compute(2)); #ifdef HAVE_PTHREAD { pthread_t t; if (pthread_create(&t, NULL, worker, NULL) != 0) { fprintf(stderr, "pthread_create failed\n"); return EXIT_FAILURE; } if (pthread_join(t, NULL) != 0) { fprintf(stderr, "pthread_join failed\n"); return EXIT_FAILURE; } } #endif return EXIT_SUCCESS; }