在释放模式 cout 不打印任何东西

Posted

技术标签:

【中文标题】在释放模式 cout 不打印任何东西【英文标题】:On release mode cout does not print anything 【发布时间】:2013-09-30 14:27:46 【问题描述】:

我有一个非常奇怪的问题。我正在使用 C++ 中的 Visual Studio,突然 cout 在发布模式下无法正常工作(它一直工作到现在),而在调试模式下它工作正常。我不知道为什么会这样。我试图删除一些代码并且我删除了几乎所有的程序(我有备份)。这是我的代码:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow )

    AllocConsole();
    cout<<"asdasd"<<endl;

    cin.get();
    return 1;

在调试模式下,程序等待用户按 Enter。在发布模式下不会。窗口刚刚关闭。

我认为这可能是视觉设置的问题。可以吗?

【问题讨论】:

cin.get();替换while(true); 我替换了,程序在发布模式下“闪烁”。窗口刚刚出现并关闭 你在做的时候有没有拿钥匙?释放模式配置通常意味着控制台在程序完成后立即关闭,但由于cin.get(),它应该等待按键。你确实把cin.get() 之前 return 1;,对吧? 是的,别担心,我做到了。它只是跳过了那个功能..奇怪:/我编辑了帖子。 【参考方案1】:

iostreams 需要初始化,这通常由控制台应用程序的启动代码执行 - 但由于您使用 WinMain 而不是 main 作为入口点,因此它被链接为 Windows 模式应用程序而不是一个控制台模式应用程序,因此不会发生初始化(无论如何都是可靠的)。在某些(定义不明确的)情况下,事情无论如何都会起作用,但充其量是不可靠的。

除非你感到如此自虐以至于你愿意做很多额外的工作只是为了让你的代码不可移植,否则以标准方式编写你的代码:

#include <iostream>

int main() 
    std::cout<<"asdasd\n";

    std::cin.get();
    return 1;

简短、简单、可靠都是好事。便携也不错。

【讨论】:

我删除了很多代码以减少代码看到问题。我在程序中有一个 win32 窗口(它是 OpenGL)。我必须使用 WinMain,直到现在它都可以使用它。 @user2320928:可以使用main作为入口点,仍然可以创建窗口,使用OpenGL等,就可以了。

以上是关于在释放模式 cout 不打印任何东西的主要内容,如果未能解决你的问题,请参考以下文章

cout没有打印任何东西到控制台

C++栈区和引用

Linux释放内存小脚本

关于对象的动态建立和释放

释放属性的简单模式

在按下和释放鼠标时绘制一个矩形,opengl