Partage
  • Partager sur Facebook
  • Partager sur Twitter

Debat : "\n" contre "endl"

24 mai 2007 à 21:04:17

Salut les zéros :) ,
J'ai l'habitude d'utiliser "\n" dans mes programmes pour faire des retours à la ligne ^^ . Mais,uite à une remarque faite par MatteX

Citation : MatteX


On préfère std::endl à \n


Je me suis posé une question :-° .
Y a t'il une réelle difference ? si oui, lequel choisir, et pourquoi ?
J'aimerai avoir votre avis là-dessus :p .
Cordialement.
  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2007 à 21:14:02

peut-être quen endl gère mieux les retours chariots / sauts de lignes
(UNIX : saut de ligne ; win32 : retour chariot et saut de ligne ; mac os (antérieur à X ?) : retour chariot)
mais peut-être que ça n'a rien avoir :p
  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2007 à 21:24:25

Je vien, totalement au hasard, d'un article qui parle des differences des deux sur la F.A.Q de developpez.com je vous le site :

Citation : developpez.com

En plus de faire un retour à la ligne en ajoutant un caractère '\n', std::endl purge le buffer de sortie et force ainsi son écriture en appelant ostream::flush() (cela a le même fonctionnement que la fonction fflush() du C).
Les deux lignes de code suivantes sont donc équivalentes:


std::cout << "coucou" << std::endl;
std::cout << "coucou\n" << std::flush;



Il faut donc être prudent avec son utilisation, notamment avec les fichiers, car une opération de flush n'est pas gratuite. Son utilisation fréquente peut même sérieusement grever les performances en annulant tous les bénéfices d'une écriture bufferisée.

  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2007 à 23:51:23

Quant à \r\n, \n ou \r, le choix est fait par le compilos si le fichier est ouvert en mode vulgairement appelé non-binaire -- qui n'est qu'un mode où certaines séquences sont interprétées pour nous.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
9 juin 2007 à 23:48:29

Il n'y a aucune différence, même si j'ai une légère préférence pour endl (pour la clarté du code).

EDIT :

Citation

Quant à \r\n, \n ou \r, le choix est fait par le compilos si le fichier est ouvert en mode vulgairement appelé non-binaire -- qui n'est qu'un mode où certaines séquences sont interprétées pour nous.



Gné :-° ?

Quel est le rapport entre un fichier ouvert et un saut de ligne?
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2007 à 0:11:54

Moi je préfère \n par habitude (peut être parce que je ne code pas depuis très longtemps aussi)
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2007 à 0:26:25

Il y a une grosse différence. std::endl provoque un flush.

L'ouverture en mode dit binaire influe (entre autres) sur le fait que "\n" ne sera pas traduit en la séquence de sauts de lignes propre à la plateforme, mais bel et bien le seul et unique caractère '\n'.

Essaie sur un autre OS -- et assures-toi d'avoir un éditeur qui t'affiches bien *tous* les caractères du fichier.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
10 juin 2007 à 9:18:40

le std::endl purge le buffer.

Comme expliqué plus haut, celà peut avoir une grande incidence sur les performances quand on utilise un flux vers un fichier.

Avec stc::cout c'est un flux vers la console qui est ouvert. Mais c'est un flux quand même. Le buffer est créer avec std::cout, et est fermé avec un std::flush ou std::endl (enfin... si je ne dit pas de bêtises :p )

Cependant, il me semble que les baisses des performances avec un flux vers la console est quasi nulle, comparé à un flux vers un fichier.
Purger le buffer du flux est dans tous les cas plus propre. Il faut juste le faire quand on a finit de travailler sur le flux (en fin de fichier, ou apres avoir afficher tout ce qu'on voulait sur la console).
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2007 à 15:30:22

Si on à créé std::endl c'est pas pour le laisser dans le placard ;) .

Donc préférez std::endl plutôt que '\n' .
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2007 à 21:03:37

Lol ca c'est de l'argument ! :D
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2007 à 22:55:11

Citation : Chrissou

Lol ca c'est de l'argument ! :D


Hé ouai t'as vu ça ! :D lol
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 juin 2007 à 23:50:01

Citation : garulfoUnix

Si on à créé std::endl c'est pas pour le laisser dans le placard ;) .

Donc préférez std::endl plutôt que '\n' .



C'est quoi ce débat de merde ? "Vous préférez les cravates bleues ou rouges ?"

Bien sûr qu'il faut utiliser \n. std::endl c'est laid, et ça ralentit tout. Et puis \n sous windows = 2 caractères et non un unique.

Pourquoi tu poste une question si tu as la réponse ?
  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2007 à 0:54:33

A ce que j'ai pus lire, '\n' est une nouvelle ligne, alors qu'un std::endl est un retour à la ligne...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 juin 2007 à 1:08:32

-_-
C'est désespérant
  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2007 à 1:38:43

... il y a pourtant tout ce qu'il y a à retenir dans l'extrait de la FAQ
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
11 juin 2007 à 13:33:00

Citation : Kreeg

C'est quoi ce débat de merde ?


=> Ta gueule. Si ça t'intéresse pas, passe ton chemin. Il se trouve qu'on a un nouvel objet qui apparait en C++, std::endl, qui remplace le \n du C, il est donc tout à fait normal de demander pourquoi.

Citation : Kreeg

Bien sûr qu'il faut utiliser \n. std::endl c'est laid, et ça ralentit tout.


Ca va bien dans ta tête ? Tu sors ça d'où ? Si ya std::endl, c'est certainement pas pour utiliser \n, et au vu des nombreuses réponses au dessus il me semble que t'oublies des points importaux (notamment le flush du buffer).

Citation : Kreeg

Et puis \n sous windows = 2 caractères et non un unique.


Windows on s'en fout. On parle de C++ là, la norme, tout ça. De plus, sous Windows, \n reste \n (soit un seul caractère), arrête de dire de la merde.

Citation : Kreeg

Pourquoi tu poste une question si tu as la réponse ?


Pas compris, c'est un PHAÏQUE ?
  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2007 à 15:26:07

Débat bouclé car vous savez pas débattre
  • Partager sur Facebook
  • Partager sur Twitter