c++ - 在 Release模式下 cout 不打印任何内容

标签 c++ release cout

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

#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;
}

在 Debug模式下,程序等待用户按下 Enter。在 Release模式下它没有。 window 刚刚关闭。

我觉得可能是视觉设置的问题。可以吗?

最佳答案

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

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

#include <iostream>

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

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

简短、简单和可靠都是好东西。便携也不错。

关于c++ - 在 Release模式下 cout 不打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19096778/

相关文章:

android-studio - 在 iOS Release模式下构建 Flutter 应用

c++ - 如何让 cout 缓冲区在 ubuntu 上刷新

c++ - 如何调整 unique_ptr vector 的 vector 大小?

c++ - 调试器不进入 MFC 源代码

c++ - 我已经创建了一个 Sprite 并使用相同的引用将它们添加到场景中,现在,我如何在不使用标签的情况下删除它们?

c++ - 将一串十六进制存储到一个字符中?

c++ - cout 的 << 运算符在运算符优先级方面如何工作?

c++ - 跨模块共享内存对象

objective-c - 为什么在使用本地变量后不久经常调用 release 而不是自动释放

Android:调试和发布版本有不同的结果