¿Por qué Microsoft usa tantas macros en su código C ++?

Tanto la implementación de la biblioteca estándar de C ++ que viene con Visual Studio como la API de Windows (tanto Win32 como MFC) incluyen cargas de macros.

Por ejemplo, han definido “VERDADERO” y “FALSO” como 1 y 0. Y reemplaza bool en todos los contextos con un “BOOL” que es un typedef a un int. Y ni siquiera están utilizando la lógica de tres vías.

También están las macros “min” y “max”, que podrían reemplazarse fácilmente con plantillas.

También hay toneladas de definiciones que se definen simplemente para nada como “lejos” y “cerca”.

Gran parte de este código se inició como código C, y data de la década de 1980. Si se escribiera desde cero hoy, entonces podría esperar que el código se vea un poco diferente.

Por ejemplo, usted elige el tipo BOOL . En el pasado, cuando se concibió por primera vez la API de Windows, no había ningún tipo booleano en C.

Mencionas las macros MIN y MAX y propones plantillas. Bueno, no hay plantillas en C como saben y esas macros probablemente incluso sean anteriores a las plantillas de C ++.

Aunque MFC es una biblioteca de C ++, se encuentra en la cima de Win32, que es una API de C. Y así, la implementación de MFC claramente tendrá que usar esa API de C en su implementación.

En los días de Ye Olden C (MS-DOS), las palabras clave de los punteros eran far y near . Para comenzar, muchas de estas bibliotecas se escribieron en C: por lo tanto, en lugar de reinventar toda la biblioteca estándar desde cero, simplemente utilizaron algo que ya funcionaba y que ya funcionaba razonablemente bien.

Además, Windows es principalmente una API de C, no una de C ++, por lo que puede esperar que haya muchas cosas (como macros, definiciones extrañas, etc.) presentes en el código.