Lo que uso se llama "compilación condicional", si estoy compilando en windows windows hará esa línea y si estoy en linux compilará la otra. Si no estoy en ninguno de los dos muestra un error de compilación.
No solo es para los sistemas operativos, puede usarlo para las cosas que quieras. Por ejemplo, puedes definir cosas que se muestren solo en "modo depuración":
Código
#define DEBUG //... codigo void funciona() { #ifdef DEBUG ofstream escritura("debug.txt"); //... // Imprimir el valor de las variables internas en un archivo... #endif }
Si yo quito el #define DEBUG de ahí arriba, entonces esa función no hará nada.