Además de la respuesta de Kyle, recomendaría encarecidamente contra tratando de usar el subsistema Posix en Windows. Se implementa a un nivel mínimo básico absoluto, de modo que Microsoft puede reclamar el "soporte Posix" en una casilla de verificación de la hoja de características. Quizás alguien en realidad lo usa, pero nunca lo he visto en la vida real.
Ciertamente se puede escribir código C multiplataforma, solo hay que tener en cuenta las diferencias entre plataformas, y probar, probar, probar. Las pruebas unitarias y una solución de CI (integración continua) contribuirán en gran medida a garantizar que su programa funcione en todas sus plataformas de destino.
Un buen enfoque es aislar las cosas dependientes del sistema en uno o unos pocos módulos como máximo. Proporcione una interfaz independiente del sistema de ese módulo. Luego, compila todo lo demás sobre ese módulo, para que no dependa del sistema para el que estás compilando.