Uno debe cumplir con los estándares siempre que sea práctico. Por lo tanto, no escriba
void main
que nunca ha sido válida C o C++, pero en lugar de escribir
int main
Con eso, su código puede compilar con, por ejemplo, g ++ (con las opciones habituales del compilador).
Dado el void main
sospecho que un entorno de Windows. Y de todos modos, para admitir el uso de su programa en un entorno de Windows, no debe usar los argumentos main
en Windows. Funcionan en * nix porque fueron diseñados en y para ese entorno; en general, no funcionan en Windows, porque por defecto (según una convención muy fuerte) están codificados como ANSI de Windows, lo que significa que no pueden codificar nombres de archivo con caracteres fuera de la configuración regional actual del usuario.
Por lo tanto, para Windows es mejor usar la función de API GetCommandLine
y su función de análisis hermana. Para la portabilidad esto debería estar mejor encapsulado en algún módulo de argumentos de línea de comando. Luego debe tratar el interesante problema de usar wchar_t
en Windows y char
en * nix & hellip;
De todos modos, no estoy seguro de la API * nix correspondiente, o incluso si hay una, pero google it. En el peor de los casos, para * nix siempre puede inicializar un módulo de argumentos de línea de comando desde main
. La fealdad de * nix proviene directamente de la necesidad de soportar la portabilidad con la construcción más no portátil, específica para OS, de C++, a saber, el estándar main
.
Estoy completamente de acuerdo con 'int main' sobre' void main'. Sin embargo, el otro comentario me deja ... perplejo. ¿Qué sistema que no sea Windows tiene un problema con la convención estándar de C++ para 'main()'? No conozco ninguno, por lo que optar por la convención estándar como 'no portátil' y 'OS-specific' parece OTT. –
@JonathanLeffler: No conozco ningún otro sistema de uso común que no sea Windows, donde los argumentos 'main' no funcionan (salvo para el texto ASCII puro del alfabeto inglés). Aún así, una característica que no funciona en Windows ** es ** no portátil, y una característica diseñada para Unix-land ** es ** específica del sistema operativo. Y la convención de argumentos 'main' no funciona en Windows (es decir, no es portátil) y está diseñada para Unix-land (es decir, es específica de sistema operativo), y esos dos aspectos están fuertemente conectados. No hay absolutamente nada divertido al respecto. Solo puedo pensar en feos motivos políticos por su persistencia. –