1

我有一个非常奇怪的问题。我正在使用 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。在发布模式下不会。窗户刚关上。

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

4

1 回答 1

1

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

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

#include <iostream>

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

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

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

于 2013-09-30T14:51:33.240 回答