没有明显目标的 std::cout 留在已发布的代码中是一件坏事吗?

Is std::cout with no apparent target a bad thing to leave in released code?

我将很快发布 Windows 视频游戏。我在我的代码中离开了不同的地方

std::cout << "Debug stuff" << calculateThisAndThat() << "\n";

这当然是在 Debug 模式下在控制台 window 中打印出来的。

    void openConsoleWindow() {
#ifdef _DEBUG /// console window opens only in **debug** mode
        AllocConsole();

        HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
        int hCrt = _open_osfhandle((long) handle_out, _O_TEXT);
        FILE* hf_out = _fdopen(hCrt, "w");
        setvbuf(hf_out, NULL, _IONBF, 1);
        *stdout = *hf_out;

        HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
        hCrt = _open_osfhandle((long) handle_in, _O_TEXT);
        FILE* hf_in = _fdopen(hCrt, "r");
        setvbuf(hf_in, NULL, _IONBF, 128);
        *stdin = *hf_in;

        HWND hwndMyWnd = GetConsoleWindow();
        SetWindowPos(hwndMyWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); // ALWAYS ON TOP
#endif
    }

Release 模式下,任何地方都没有明显打印(或者我认为如此)。我应该添加

#ifdef _DEBUG

我的代码中的每个 std::cout,出于任何原因?

std::cout 与一些 C++ 相比非常慢 code.it 可能会显着降低你的速度,所以不要让它 运行 在你的发布中。

你可能想要。

  1. 即使你没有打印任何东西,你仍然在执行 calculateThisAndThat()

  2. 熟练的逆向工程师不需要花费很多时间来重新启用控制台window。

话虽这么说,但我建议将来使用不同的日志记录例程(iostream 因速度慢而受到很多不好的评价),您只需使用一个编译时设置就可以关闭它。