web-dev-qa-db-fra.com

Comment désactiver la sortie cout dans le runtime?

J'utilise souvent cout à des fins de débogage dans de nombreux endroits différents de mon code, puis je suis frustré et je les commente tous manuellement.

Existe-t-il un moyen de supprimer la sortie cout dans le runtime?

Et plus important encore, disons que je veux supprimer toutes les sorties cout, mais je veux toujours voir 1 sortie spécifique (disons la sortie finale du programme) dans le terminal.

Est-il possible d'utiliser une "" autre façon "" d'imprimer sur le terminal pour afficher la sortie du programme, puis lors de la suppression de cout, les choses qui sont imprimées en utilisant cette "" autre manière ""?

17
user3639557

N'utilisez pas cout à des fins de débogage, mais définissez un autre objet (ou fonction ou macro) qui l'appelle, vous pouvez alors désactiver cette fonction ou macro au même endroit.

16
RichieHindle

Bien sûr, vous pouvez ( exemple ici ):

int main() {
    std::cout << "First message" << std::endl;

    std::cout.setstate(std::ios_base::failbit);
    std::cout << "Second message" << std::endl;

    std::cout.clear();
    std::cout << "Last message" << std::endl;

    return 0;
}

Les sorties:

First message
Last message

Cela est dû au fait que le fait de mettre le flux dans l'état fail le fera ignorer silencieusement toute sortie, jusqu'à ce que le failbit soit effacé.

65
user703016

Pour supprimer la sortie, vous pouvez déconnecter le tampon sous-jacent de cout.

#include <iostream>

using namespace std;

int main(){

    // get underlying buffer
    streambuf* orig_buf = cout.rdbuf();

    // set null
    cout.rdbuf(NULL);

    cout << "this will not be displayed." << endl;

    // restore buffer
    cout.rdbuf(orig_buf);

    cout << "this will be dispalyed." << endl;

    return 0;
}
19
911

Vous pouvez utiliser cerr - flux de sortie standard pour les erreurs à des fins de débogage.

Il existe également clog - flux de sortie standard pour la journalisation.

En règle générale, ils se comportent tous les deux comme un cout.

Exemple:

cerr << 74 << endl;

Détails: http://www.cplusplus.com/reference/iostream/cerr/

http://www.cplusplus.com/reference/iostream/clog/

4
ivan.mylyanyk

Il semble que vous imprimiez des messages de débogage. Vous pouvez utiliser TRACE dans Visual C++/MFC ou vous pouvez simplement créer une fonction Debug() qui s'en occupe. Vous pouvez l'implémenter pour l'activer uniquement si un indicateur distinct est défini. De nombreux programmes utilisent un paramètre de ligne de commande appelé verbose ou -v par exemple, pour contrôler le comportement de leurs messages de journal et de débogage.

0
Alex