Originariamente inviato da ramy89
Comunque _tmain non è c++ standard, è fatto dalla Microsoft e ho il serio sospetto che l' unico motivo sia quello di rendere i programmi non portabili su altre piattaforme.
Il motivo è un altro, ben più storico e che riguarda UNICODE.
La serie Win9x si basava su stringhe ANSI, le versioni NT in poi su UNICODE.
Per evitare che un programmatore impazzisse a cambiare le chiamate API, in modo da adattarle alle varie stringhe, Microsoft ha creato un sistema di macro per astrarre le varie funzioni.
Giusto per fare un esempio, CreateWindow è definita così:
codice:
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE
e così tutte le funzioni API che prendono stringhe.
Per la libc è leggermente diverso:
codice:
#ifdef _UNICODE
#define char TCHAR
#define strcpy _tcscpy
#else
#define wchar_t TCHAR
#define wcscpy _tcscpy
#endif // !_UNICODE