¿Por qué stdfax.h debería ser la primera inclusión en aplicaciones MFC?

Quiero saber por qué esta línea existe en cada aplicación MFC (lo que hace que stdafx.h sea el primer encabezado incluido en cada archivo):

#ifndef __AFXWIN_H__ #error "include 'stdafx.h' before including this file for PCH" #endif 

¿Cuál es la razón (s) detrás de este comportamiento?

Solo es cierto cuando se usan encabezados precomstackdos (PCH), y la razón por la que no debería haber nada antes de que el #include "stdafx.h" sea:

Visual C ++ no comstackrá nada antes del #include “stdafx.h” en el archivo fuente, a menos que la opción de comstackción /Yu’stdafx.h ‘esté desmarcada (por defecto); asume que todo el código en la fuente hasta e incluyendo esa línea ya está comstackdo

de http://en.wikipedia.org/wiki/Precompiled_header

Deberías leer esta breve descripción stdafx.h

Los comstackdores compatibles (por ejemplo, Visual C ++ 6.0 y posterior) precomstackrán este archivo para reducir los tiempos generales de comstackción. Visual C ++ no comstackrá nada antes del #include “stdafx.h” en el archivo fuente, a menos que la opción de comstackción /Yu’stdafx.h ‘esté desmarcada (por defecto); asume que todo el código en la fuente hasta e incluyendo esa línea ya está comstackdo.

Dice implícitamente que, para lograr las ventajas de PCH, debe incluir stdafx.h lo antes posible en la jerarquía de inclusión.

stdafx.h archivo stdafx.h incluye encabezados comunes que se usan a lo largo de diferentes archivos en un proyecto. No es obligatorio incluirlo, pero luego tiene que administrar todos los encabezados a lo largo de su proyecto y esto hará que se repitan algunos encabezados a lo largo de diferentes archivos.