MFC程序使用 printf 输出调试信息

VS2013及之前版本

1. 包含头文件

#include <io.h>
#include <fcntl.h>

2. 添加函数

void InitConsoleWindow()
{             
    AllocConsole();             
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);             
    int hCrt = _open_osfhandle((long)handle,_O_TEXT);             
    FILE * hf = _fdopen( hCrt, "w" );             
    *stdout = *hf; 
}

3. 在窗口初始化函数中添加调用

BOOL CHelloMFCDlg::OnInitDialog() 
{             
    CDialog::OnInitDialog();            
    InitConsoleWindow(); // add            
    printf("str = %s\n ", "Debug output goes to terminal\n");             
    ...... 
}

调用此函数后会弹出一个Console,printf的信息就会出现在这上面,我们就可以查看log信息了。

VS2015及之后版本

#include <io.h>
#include <fcntl.h>
#include <conio.h >

2. 添加函数

void InitConsoleWindow()
{
	AllocConsole();
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	int hCrt = _open_osfhandle((long)handle, _O_TEXT);
	FILE * hf = _fdopen(hCrt, "w");
	*stdout = *hf;

	setvbuf(stdout, NULL, _IONBF, 0);
}

3. 在窗口初始化函数中添加调用

BOOL CCAN_DemoDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	InitConsoleWindow(); // add            
        // 需要调用 _cprintf 进行打印
	//printf("str = %s\n ", "Debug output goes to terminal\n");  
	_cprintf("str = %s\n ", "Debug output goes to terminal\n");

        ........

疑问:VS2015后,printf()被映射到什么地方了

发表评论

电子邮件地址不会被公开。 必填项已用*标注