3

我对 C++ 很陌生,最近从 Linux 上的 g++ 编译切换到了 Visual Studio。我试图编写一个简单的程序来测试这样的一些:

#include <iostream>

void main()
{
    // Things
}

cout <<在我意识到它不能以这种方式打印到 Visual Studio 的输出窗口之前,我正在使用它来显示函数返回的内容。我知道我可以使用调试模式,但是 Visual Studio 中有没有办法将输出显示到窗口?我发现的一篇较早的帖子建议使用 OutputDebugString,但我没有将代码编写为 Win32 应用程序,而且我认为对于简单的 cpp 文件不存在此功能。

还有,有没有什么原因是程序执行的时候会弹出一个黑色的窗口,然后又马上消失呢?

4

3 回答 3

4

OutputDebugString 为胜。它确实存在。只需包含 windows.h。在那里。

有一些方法可以有效地将 stderr 和 stdout 连接到管道,并将输出重新连接到 OutputDebugString,但听起来您正在寻找一种简单的方法。任何写入标准输出(cout,随便)的东西都会进入控制台窗口,所以在你去 OutputDebugString 坚果之前,首先检查你的控制台窗口是否有输出......

说到控制台窗口...

黑色弹出并立即消失的原因是您的控制台窗口正在打开和关闭,并且您的进程很可能在完成任何实质性操作之前就完成了。在 IDE 中的 main() 末尾插入断点。然后你可以Alt+Tab到它。

顺便说一句:如果您使用 OutputDebugString,它不会 CRLF 您发送的文本,因此请将其包含在您的输出文本中。

于 2012-10-13T05:17:27.343 回答
2

下面是我写的一个可移植的 TRACE 宏。

在 Windows 上,它基于OutputDebugStringWhozCraig 的回答。

#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

例子:

#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');
}
于 2013-01-30T17:17:15.717 回答
0

如果要从单元测试用例中写入输出窗口,则可以使用以下命令:

#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_METHOD(testingsomething)
{
    Logger::WriteMessage("Hello output window");
}
于 2017-06-20T21:34:49.477 回答