Entiendo que el estándar debe seguirse, pero ¿no pone grilletes a la creatividad del programador? Todavía hay algunas diferencias en la forma en que los diferentes compiladores siguen los estándares. Puedo, por ejemplo, escribir un código que funcione, muy bueno en rendimiento y velocidad, es decir, todo lo que importa, pero aún así no necesariamente sigue estrictamente los estándares.
No. El estándar dice lo que está permitido hacer. Si no se especifica, se encuentra en un territorio de comportamiento indefinido, y luego todas las apuestas están apagadas: el programa es libre de hacer cualquier cosa.
Como mencionó un ejemplo específico de void main()
vs int main()
, puedo mejorar mi respuesta.
void main()
No es una declaración estándar de la función principal. Puede funcionar en algunos compiladores a través de extensiones, pero depende de la implementación. Incluso si funciona, debe verificar si hace lo que quiere. El problema es que los desarrolladores del compilador pueden decidir eliminarvoid main()
con la próxima versión del compilador, rompiendo su aplicación.
Por otro lado, el estándar define claramente la firma de main como int main()
y le dice lo que debe hacer.
Por otro lado, hay cosas que no están definidas en el estándar. Luego, puede aplicarse otro estándar (como, por ejemplo, POSIX). El mejor ejemplo puede ser con la implementación de subprocesos en c ++ 03, ya que los programas estándar de c ++ 03 tenían 1 subproceso. En ese caso, se ve obligado a utilizar la biblioteca dependiente de la plataforma, o algo así como impulsar .