Je comprends que la norme doit être respectée, mais cela n'entrave-t-il pas la créativité du programmeur? il existe encore quelques différences dans la façon dont les différents compilateurs suivent les normes. Je peux par exemple écrire un code qui fonctionne, très bon en performance et en vitesse c'est-à-dire tout ce qui compte, mais qui ne suit pas forcément les standards.
Non. La norme indique ce qui est autorisé à faire. S'il n'est pas spécifié, vous êtes dans un territoire de comportement indéfini, puis tous les paris sont désactivés - le programme est libre de faire n'importe quoi.
Puisque vous avez mentionné un exemple spécifique de void main()
vs int main()
, je peux améliorer ma réponse.
void main()
n'est pas une déclaration standard de la fonction principale. Il peut fonctionner sur certains compilateurs via des extensions, mais il dépend de l'implémentation. Même si cela fonctionne, vous devez vérifier s'il fait ce que vous voulez. Le problème est que les développeurs du compilateur peuvent décider de supprimer void main()
avec la prochaine version du compilateur, cassant votre application.
D'un autre côté, la norme définit clairement la signature de main as int main()
et indique ce qu'elle doit faire.
Par contre, il y a des choses qui ne sont pas définies dans la norme. Ensuite, une autre norme peut s'appliquer (comme par exemple, POSIX). Le meilleur exemple peut être avec l'implémentation de threads en c ++ 03, car les programmes standard c ++ 03 étaient à 1 thread. Dans ce cas, vous êtes obligé d'utiliser une bibliothèque dépendante de la plate-forme, ou quelque chose comme boost .