3 votes

Impression dans une fenêtre de sortie dans Visual Studio

Je suis assez novice en matière de C++ et je suis récemment passé de la compilation en g++ sur Linux à Visual Studio. J'essayais d'écrire un programme simple pour tester quelque chose comme ceci :

#include <iostream>

void main()
{
    // Things
}

Et j'utilisais cout << pour afficher ce que la fonction renvoie, avant que je ne réalise que cela ne fonctionne pas de cette façon pour imprimer dans la fenêtre de sortie dans Visual Studio. Je sais que je peux utiliser le mode débogage, mais existe-t-il un moyen dans Visual Studio d'afficher la sortie dans la fenêtre ? L'un des anciens messages que j'ai trouvé suggérait d'utiliser OutputDebugString, mais je n'ai pas écrit le code comme une application Win32, et je pense que cette fonction n'existe pas pour les simples fichiers cpp.

Par ailleurs, y a-t-il une raison pour laquelle une fenêtre noire apparaît lorsque le programme est exécuté, puis disparaît immédiatement ?

4voto

WhozCraig Points 32734

OutputDebugString pour la victoire. Elle existe. Il suffit d'inclure Windows.h. C'est là.

Il existe des moyens de câbler efficacement stderr et stdout à un tuyau et de faire en sorte que la sortie soit reliée à OutputDebugString, mais il semble que vous recherchiez un moyen simple. Tout ce qui est écrit sur stdout (cout, peu importe) ira dans la fenêtre de la console, donc avant de passer par OutputDebugString nuts vérifiez d'abord votre fenêtre de console pour votre sortie...

En parlant de fenêtre de console...

La raison pour laquelle le noir apparaît et disparaît immédiatement est que votre fenêtre de console s'ouvre et se ferme, et il est probable que votre processus se termine avant que quelque chose de substantiel ne soit fait. Placez un point d'arrêt à la fin de main() dans l'IDE. Vous pouvez alors Alt + Tab à elle.

BTW : si vous utilisez OutputDebugString, il ne met PAS de CRLF dans le texte que vous envoyez, alors incluez-le dans votre texte de sortie.

2voto

olibre Points 6069

Vous trouverez ci-dessous une macro TRACE portable que j'ai écrite.

Sous Windows, il est basé sur OutputDebugString comme indiqué dans la réponse de WhozCraig.

#ifdef ENABLE_TRACE
#  ifdef _MSC_VER
#    include <windows.h>
#    include <sstream>
#    define TRACE(x)                           \
     do {  std::stringstream s;  s << (x);     \
           OutputDebugString(s.str().c_str()); \
        } while(0)
#  else
#    include <iostream>
#    define TRACE(x)  std::clog << (x)
#  endif        // or std::cerr << (x) << std::flush
#else
#  define TRACE(x)
#endif

Exemple :

#define ENABLE_TRACE  // Can depend on _DEBUG or NDEBUG macros
#include "my_above_trace_header.h"

int main (void)
{
   int     v1 = 123;
   double  v2 = 456.789;
   TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n');
}

0voto

serup Points 1432

Si vous voulez écrire dans une fenêtre de sortie à partir d'un cas unittest, vous pouvez utiliser ce qui suit :

#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_METHOD(testingsomething)
{
    Logger::WriteMessage("Hello output window");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X