MFC中return和break用法示例

直接在 VC6.0 里新建 MFC 工程就能运行的完整程序,包含按钮点击界面,清晰区分 break(跳出循环 /switch)和 return(退出函数)的用法。

打开 VC6.0 → File → New → Projects → MFC AppWizard(exe)

工程名:TestReturnBreak → 选择 Dialog based(基于对话框)→ 一路 Finish

对话框上放 两个按钮:

按钮 1:break 测试 → ID:IDC_BUTTON_BREAK

按钮 2:return 测试 → ID:IDC_BUTTON_RETURN

  1. 点击【break 测试】按钮循环执行到 i=3 → 弹出 break 提示
    循环立刻停止
    循环后面的代码继续执行,弹出第二句提示
    结论:break 只跳出循环 /switch,不结束函数
  2. 点击【return 测试】按钮
    弹出 return 提示
    函数直接结束
    后面的提示框永远不会弹出
    结论:return 直接退出整个函数

break

只能用在:for/while 循环、switch 语句

作用:跳出当前一层循环 /switch,函数继续执行

return

用在函数里(MFC 里常用在按钮点击函数)

作用:直接结束整个函数,后面代码全都不执行

TestReturnBreakDlg.h

cpp 复制代码
#if !defined(AFX_TESTRETURNBREAKDLG_H__INCLUDED_)
#define AFX_TESTRETURNBREAKDLG_H__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg dialog

class CTestReturnBreakDlg : public CDialog
{
// Construction
public:
	CTestReturnBreakDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CTestReturnBreakDlg)
	enum { IDD = IDD_TESTRETURNBREAK_DIALOG };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CTestReturnBreakDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	virtual BOOL OnInitDialog();
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CTestReturnBreakDlg)
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnButtonBreak();
	afx_msg void OnButtonReturn();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

#endif // !defined(AFX_TESTRETURNBREAKDLG_H__INCLUDED_)

TestReturnBreakDlg.cpp

cpp 复制代码
// TestReturnBreakDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TestReturnBreak.h"
#include "TestReturnBreakDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg dialog

CTestReturnBreakDlg::CTestReturnBreakDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestReturnBreakDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestReturnBreakDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CTestReturnBreakDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_BREAK, OnButtonBreak)
	ON_BN_CLICKED(IDC_BUTTON_RETURN, OnButtonReturn)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg message handlers

BOOL CTestReturnBreakDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	return TRUE;
}

void CTestReturnBreakDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CTestReturnBreakDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this);
		SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CTestReturnBreakDlg::OnQueryDragIcon()
{
	return (HCURSOR)m_hIcon;
}

// break 按钮
void CTestReturnBreakDlg::OnButtonBreak() 
{
	for(int i=1; i<=5; i++)
	{
		if(i == 3)
		{
			MessageBox("循环到 i=3,break 跳出循环", "演示", MB_OK);
			break;
		}
	}
	MessageBox("break 结束,循环外代码继续执行", "结果", MB_OK);
}

// return 按钮
void CTestReturnBreakDlg::OnButtonReturn() 
{
	MessageBox("执行 return,直接退出函数", "演示", MB_OK);
	return;
	
	MessageBox("这行永远不会执行", "结果", MB_OK);
}


相关推荐
h39744 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码5 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客6 小时前
vs 怎么根据dll 生成lib文件
c++·qt
程序员老陆7 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
半杯咖啡半行码10 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
xh didida11 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
垆边人似月.11 小时前
华为机试题 :两数之和
c++·算法·华为
个 人 练 习 生12 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
垆边人似月.12 小时前
华为机试题 :有效的括号
c++·算法·华为
坤坤子吖12 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习