Supongamos el siguiente ejemplo. Tienes dos archivos .h, file1.h y file2.h, y un archivo cepepé, file.cpp. El file1.h luce algo como:
class Clase1 { ... };
El file2.h luce como:
#include "file1.h"
class Clase2 { ... }; //se entiende que Clase2 hace uso de Clase1...
Y finalmente, el cepepé luce como:
#include "file1.h"
#include "file2.h"
// lo demás ya no nos importa.
Evidentemente, el siguiente mandaría un mensaje de error, ya que a file1.h se le está haciendo un doble include, y por ende en el cepepé tendríamos los mismos símbolos definidos dos veces. Pues bien, el #pragma once lo que hace es que le dice al compilador que si un archivo --digamos file1.h-- ya fué incluído, no lo vuelva a incluir una segunda ocasión. Así, el problemo del ejemplo se resuelve si file1.h luciese como:
#pragma once
class Clase1{ ... };
El estándar de C++ define la existencia de directivas #pragma como directivas definidas por el compilador, y estas no son estándares, por lo que si intentas compilar este código con algún otro compilador que no sea VC, quizás te salga un error de que no reconoce el #pragma once. Pero si esto no te importa (todo tu proyecto lo harás siempre con VC), es realmente una muy buena idea el emplear un #pragma once en todos tus .h.
Saludos.