c++ - wwinmain - createwindow example
¿Por qué hay una macro que define_tmain? (2)
Soy nuevo en la codificación C ++, proveniente de Java y C # de fondo. Estoy desconcertado por la proliferación de #definir términos que comienzan con los más básicos:
#define _tmain wmain
La primera vez que aprendí algo de C hace siglos, la función principal era:
int main(int argc, char *argv[])
En el proyecto de Visual C ++ que creé, hizo la función principal:
int _tmain(int argc, _TCHAR* argv[])
Me pregunto por qué tenía que haber una traducción de nombre de wmain a _tmain . ¿Por qué no usar el prototipo original de la función main C?
En general, parece que hay una gran cantidad de definición de #define algo que parece bastante claro para empezar, a algo que se ve más misterioso y menos claro (me refiero a wmain to _tmain ).
Gracias por tolerar lo que puede ser una pregunta muy obvia.
Debido a que Microsoft decidió que la mejor manera de agregar soporte Unicode a C ++ era agregar un tipo de TCHAR , que es #defined a char o wchar_t dependiendo del valor de Propiedades del proyecto> Propiedades de configuración> General> Conjunto de caracteres. _tmain también está _tmain definido en main (que toma char s) o wmain (que toma wchar_t s) dependiendo de esa configuración.
Esta es una característica específica de Visual C ++, no es parte de C ++.
La mayoría de las funciones API de Windows tienen dos versiones: las que terminan en W , que se utilizan con cadenas de caracteres anchas (cadenas wchar_t ) y las que terminan en A , que se utilizan con cadenas de caracteres angostas (cadenas de caracteres). Las "funciones" reales de la API de Windows no tienen ningún sufijo y se definen como macros que se expanden a la versión correcta según la configuración.
Los nombres T (como _TCHAR y _tmain ) son para el mismo propósito: son macros que se expanden al nombre correcto según su configuración de compilación, por lo que wchar_t y wmain para soporte de caracteres anchos, o char y main para compatibilidad de caracteres angostos.
La idea es que si escribe su código usando los nombres agnósticos de tipo de carácter (los nombres T ), puede compilar su código para usar caracteres angostos (ASCII) o caracteres anchos (Unicode) sin cambiarlo. La compensación es que su código es menos portátil.