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


相关推荐
顾温6 小时前
default——C#/C++
java·c++·c#
凉茶钱6 小时前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
脏脏a6 小时前
【C++模版】泛型编程:代码复用的终极利器
开发语言·c++·c++模版
island13146 小时前
【C++仿Muduo库#3】Server 服务器模块实现上
服务器·开发语言·c++
散峰而望6 小时前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
小龙报7 小时前
【C语言】内存里的 “数字变形记”:整数三码、大小端与浮点数存储真相
c语言·开发语言·c++·创业创新·学习方法·visual studio
刃神太酷啦7 小时前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
2301_789015627 小时前
C++:继承
c语言·开发语言·c++
星河耀银海7 小时前
C++ 运算符重载:自定义类型的运算扩展
android·java·c++
feng_blog66887 小时前
C++线程池|解决死锁、崩溃、丢任务所有痛点
java·开发语言·c++