esatto, ho provato anche su linux adesso, il seguente codice:

codice:
#include <stdio.h>


#ifdef _WIN32
  char* a = "WINDOWS\0";
#else 
#ifdef linux
  char* a = "LINUX\0";
#else
#error OS non supportato
#endif
#endif

  int main() {
	  printf("%s\n", a);

	  return 0;
  }
SU windows stampa WINDOWS, su linux LINUX.

Li dentro puoi pilotare la compilazione per includere gli header solo di win e solo di linux e poi astrarli con una nuova interfaccia che si adatta, ad esempio potresti fare un metodo con firma
"connetti(host, porta)", e il corpo si adatta tramite le direttive usando i file h del sistema ospite.

Un ultimo esempio che mi viene in mente è quello per pulire lo schermo:

codice:
#include <stdio.h>
#include <stdlib.h>


#ifdef _WIN32
 const char* pulisci = "cls";
#else 
#ifdef linux
 const char* pulisci = "clear";
#else
#error OS non supportato
#endif
#endif

  int main() {
	 printf("Ciao");
system(pulisci);
	  return 0;
  }