¿Por qué SDL define macro principal?

Después de tener algunos problemas para configurar SDL, descubrí que SDL define una macro que reemplaza main:

#define main SDL_main

// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);

Esto también puede crear errores de compilación, si la función principal no tiene elargc yargv Parámetros definidos.

Esta macro me da dolores de cabeza justo cuando la veo ... ¿Por qué SDL necesita redefinir main? Después de algunas búsquedas más, encontré que algunas personas#undef main, y úsalo de la manera normal.

Así que esta es la pregunta: ¿Por qué SDL necesita redefinir main, qué hace? ¿Hay efectos secundarios para no definirlo?

Una cosa que noté es que SDL redirige la salida estándar y el error a los archivos (y no quiero este comportamiento), y este comportamiento se detiene si undefine main.

Respuestas a la pregunta(2)

Su respuesta a la pregunta