Maison >développement back-end >C++ >Pourquoi devriez-vous éviter de mélanger cout et wcout dans le même programme C ?

Pourquoi devriez-vous éviter de mélanger cout et wcout dans le même programme C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 14:11:02825parcourir

Why Should You Avoid Mixing cout and wcout in the Same C   Program?

Mélanger des flux de sortie larges et étroits dans le même programme

Dans le "C Cookbook", il est mentionné que mélanger cout et wcout dans le même programme ne devrait pas être fait. Ce commentaire vient du fait que les standards C et C imposent que les flux aient une orientation, et une fois cette orientation définie pour un flux, il ne faut pas mélanger des opérations incompatibles avec l'orientation.

Quoi est-ce que cela signifie en pratique ?

Lorsque cout ou wcout est appelé pour la première fois, l'orientation de stdout devient définie. Dans le cas de cout, stdout devient un flux orienté octets, et dans le cas de wcout, stdout devient un flux orienté large. Selon la norme C [27.4.1] et la norme C [7.19.2], une fois l'orientation d'un flux définie, vous ne devez pas appeler une fonction qui n'est pas compatible avec l'orientation de ce flux.

Exceptions à la règle

Cependant, il est important de noter que tous les compilateurs ne suivent pas strictement cette norme. Par exemple, dans Visual C 10.0, la fonction fwide (utilisée pour définir l'orientation d'un flux) n'est pas implémentée. Par conséquent, dans Visual C, le mélange de cout et wcout est autorisé.

De même, dans les premières versions de GCC, en raison d'un bug qui a été corrigé, il était possible d'appeler cout et wcout dans le même programme en appelant std ::ios::sync_with_stdio(false); au début du programme.

Cependant, il est important de garder à l'esprit qu'il s'agit d'exceptions à la règle. En général, il n'est pas recommandé de mélanger des flux de sortie larges et étroits dans le même programme, car cela peut entraîner un comportement inattendu ou des résultats indéfinis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn