熟悉Visual C++ IDE
来源:互联网 发布:linux 守护进程 编辑:程序博客网 时间:2024/05/16 12:48
2.2 熟悉Visual C++ IDE
集成开发环境是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。简言之,IDE就是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套件。
Visual C++ IDE实际上是Visual Studio集成开发环境的一部分,Visual Studio 2005所包含的成员如图2-7所示,可以看出,除了Visual C++,它还包含Visual Basic、C#,我们使用Visual C++进行编程的一些操作,当我们转换到C#或者Visual Basic语言的时候,其操作基本上是一致的。
图2-7 Visual Studio集成开发环境
2.2.1 文件、项目与解决方案
在最原始的时代,我们使用C++编译器来编译每个文件,并通过命令行程序将它们手动地连接起来。这些源文件主要包括.h和.cpp文件。
在Visual C++中,项目(project,又译做工程)的概念被提出,它会包含一系列的源文件、静态库,以及项目的配置信息。在 Windows环境下,人们还需要用到一系列的资源,如:图标、工具栏、菜单等,这些资源也被纳入了项目之中,这种概念如图2-8所示。
图2-8 Visual C++项目的含义
比项目更大的概念是解决方案(solution),解决方案包含一组项目。如:当我们开发某个网络项目时,它可能包括服务器端和客户端,那么这个时候将服务器端和客户端两个项目XXXServer、XXXClient纳入一个XXX解决方案中是合适的。
当我们创建新项目的时候,Visual C++总是要求我们输入解决方案的名称,默认情况下,解决方案的名称与项目的名称一样,新建项目的情形如图2-9所示。
<DIV>解决方案的名称
ch15
</DIV><DIV>项目的名称
CInt
</DIV>图2-9 创建新项目时指定解决方案名称
在某解决方案中添加新的项目的情形如图2-10所示。
<DIV>解决方案
</DIV><DIV>
新建项目
</DIV><DIV>
多个项目列表
</DIV>
图2-10 在解决方案中添加项目
Visual C++项目的目录结构是很清晰的,不同的项目具有的目录结构是大致相同的。对于某个项目PPP,Visual C++会为它准备以下几个目录。
l SSS:解决方案的存放目录,一个解决方案可包含多个项目。
l SSS \PPP:存放PPP项目的源文件和其他信息。
l SSS \PPP\Res:存放PPP项目的资源文件。
l SSS \Debug:存放SSS下各项目的调试版本程序的输出文件。
l SSS \Release:存放SSS下各项目的发布版本程序的输出文件。
在项目目录下,会存在着不同类型的文件,这些文件可能具有的后缀名及其含义如表2-1所示。
<DIV align=center>表2-1 Visual C++常见文件类型
后缀名
含义
APS
资源视图(Resource View)信息文件
BSC
浏览器信息文件
IDL
接口定义语言文件
NCB
Class View信息文件
SLN
解决方案文件
SUO
包含解决方案中的可选项和配置信息
VCPROJ
项目文件
RC
描述了项目的菜单、对话框、字符串和快捷键资源
</DIV>提示
本书所附光盘中的源代码皆以解决方案组织,解决方案名对应于每章,如:ch02(第二章)。在解决方案下会放置该章对应的项目,如:stdcpp。我们在描述这些项目路径时,会说成“\ch02\stdcpp”。
2.2.2 Visual C++代码编辑器
Visual C++包含了一个强大的代码编辑器,当我们创建或者打开一个.cpp文件时,代码编辑器就会被启动。在Visual C++中编辑代码的情形如图2-11所示。
<DIV>动态语法着色
</DIV>
图2-11 代码编辑器
代码编辑器可能是那些自诩为“真正的程序员”(包括笔者在内)最为亲切的界面。Visual C++代码编辑器的“强大”体现在以下几点。
l 动态语法着色:在代码编辑器中,诸如for、return这些关键词会自动着色,此外,注释、数字、字符串也会显示成不同的颜色。
l 代码自动缩进:代码自动缩进的含义在于,一旦你编写了“if”或者“{”,当你按回车键时,下一行的代码将会自动缩进。
l 智能提示:智能提示是Visual C++提供的最有用的功能之一,如果没有该功能,程序员就必须花费很多的时间去记忆太多的类名、函数名及它们的原型定义等,而且一旦在编码过程中发生了任何拼写错误,都会带来恼人的编译错误。智能提示有效避免了该错误的发生,它会下拉显示当前可用的标识符,在函数调用语句的编写中,会自动显示函数的参数及其类型,如图2-12所示。
图2-12 智能提示
l 代码格式化:“代码格式化”的功能可以在主菜单【编辑】→【高级】下找到,如图2-13所示。一旦使用了“代码格式化”,选定的代码段会自动进行缩进,从而大大提高程序的美观性。
图2-13 代码格式化菜单
l 代码热点链接:如图2-14所示,我们可以跳转到某个标识符(对象名、类名、函数等)所在的头文件,这个特性有点类似于“超级链接”。
图2-14 代码热点链接
2.2.3 Visual C++资源编辑器
大家知道,编写Windows程序时,程序中用到的菜单、图标、位图、字符串可以存储在资源中。Visual C++由此提供了资源编辑器,帮助我们很方便地进行资源地设计。
在项目开发过程中,一旦我们切换到【资源】视图,会看到该项目中的各种资源,如图2-15所示。一旦我们打开某个资源,Visual C++就会启动对应的设计界面和工具栏。
<DIV>资源视图
</DIV><DIV>
对话框的编辑界面
</DIV><DIV>
项目中的资源列表
</DIV><DIV>
资源编辑的工具栏
</DIV>
图2-15 资源编辑器
我们也可以向项目中添加新的资源,我们可以添加的资源种类如图2-16所示: Accerlerator(快捷键)、Bitmap(位图)、光标(Cursor)、Dialog(对话框)、HTML页面、Icon(图标),Menu(菜单)以及String Table(字符串表),Tool Bar(工具栏)以及Version(程序的版本信息)。
除了这些资源类型之外,我们也可以通过【导入】创建新的资源,并为之指定一个资源的类型名。单击【导入】按钮,在【导入】窗口中选择某个文件,如:“colors.dict”,Visual C++会弹出窗口询问资源类型,如图2-17所示。
图2-16 添加资源 图2-17 导入其他类型的资源
我们输入“DICT”之后,可以发现在资源列表中自动添加了“DICT”类型的资源IDR_DICT1,如图2-18所示。通过这种方式,我们在程序中添加了自定义类型的资源,并通过代码完成了这些资源的加载。
<DIV>新的资源类型“DICT”
</DIV>
图2-18 导入的资源
2.2.4 Visual C++应用向导
使用Visual C++应用向导可以创建指定类型的项目。一旦我们选择了新建一个项目,Visual C++总会弹出一个对话框让我们选择项目的类型,如图2-19所示。当我们选择了某个类型,如:“MFC”,右侧视图会列出相应的子类型(模板),如:“MFC ActiveX 控件”、“MFC DLL”和“MFC 应用程序”。如果我们希望制作一个EXE应用程序,则可以考虑选择“MFC 应用程序”。
图2-19 选择项目类型
当然,一旦我们选择了“MFC 应用程序”,接下来应用向导会引导我们做出更多的选择,根据这些向导,程序员可以通过简单的选择操作完成项目框架的构造。常见的Visual C++项目类型如表2-2所示。
<DIV align=center>表2-2 常见Visual C++项目类型
项目类型
子类型
ATL
ATL项目
CLR
类库、CLR控制台应用程序、CLR空项目、Windows 窗体应用程序、Windows 窗体控件库、Windows服务
MFC
MFC ActiveX控件、MFC DLL、MFC应用程序
Win32
Win32 控制台应用程序、Win32 项目
</DIV>提示
在本书的内容中,当我们提及某个应用程序的类型时,不再采用如上啰嗦的阐述,而是采用类似于【MFC】→【MFC 应用程序】的书写方式,望读者注意。
2.2.5 Visual C++调试器
Visual C++ IDE提供了功能强大的调试器,包括联编(build)工具和调试(debug)工具,Visual C++的调试工具栏如图2-20所示,在调试状态下,其中的某些按钮才会显示。
图2-20 调试工具栏
从左到右,各按钮的含义如表2-3所示。
<DIV align=center>表2-3 调试工具按钮
图标
名称
含义
启动调试
开始程序的运行
全部中断
中断程序的运行
停止调试
停止当前程序的运行
重新启动
重新来过
显示下一语句
显示下一条语句
逐语句
进入当前调用的函数体,对应于快捷键【F11】
逐过程
单步执行,对应于快捷键【F10】
跳出
跳出当前调用的函数,对应于快捷键【Shift+F11】
十六进制显示
以十六进制显示变量值
在源中显示线程
调试窗口
打开调试窗口(包括断点、输出、即时窗口)
</DIV>如果我们发现某个程序中有bug 产生,就可以对其代码部分进行调试,以下罗列出通常采取的步骤。
在可疑的代码处添加断点。
单击工具栏中的【启动】按钮,或者按【F5】键,开始调试运行程序。
当运行至断点时,程序会暂停下来,如图2-21所示。
<DIV>
程序会停在断点位置
</DIV>
图2-21 通过加入进行断点调试
在暂停状态,我们可以通过打开其他功能窗口来查看程序状态,如:某个变量的值、程序调用栈的结构、寄存器的值等。这些窗口可以通过【调试】→【窗口】菜单项找到,如图2-22所示。
<DIV>调试窗口
</DIV>图2-22 调试窗口
可用的调试窗口如表2-4所示。
<DIV align=center>表2-4 调试窗口菜单项
图标
名称
含义
断点
查看所有断点
输出
查看程序的调试输出信息
监视
用以查看指定表达式的值
自动窗口
显示当前模块的自动变量
局部变量
显示当前模块的局部变量
即时
即时根据用户的输入/输出表达式的值
调用堆栈
显示函数调用的栈结构
线程
显示当前的线程信息
模块
显示当前的模块信息
进程
显示当前的进程信息
内存
查看内存中的值
反汇编
查看汇编代码
寄存器
显示各寄存器的值
</DIV>通过调试工具,程序员可以及时地观察到调用栈、各内存变量的变化,从而最终找到异常的代码所在。
除调试工具外,Visual C++还提供了两个很有用的宏函数:TRACE()和ASSERT(),它们常常配合调试使用。TRACE的函数原型为:
TRACE(exp )
TRACE(DWORD category, UINT level, LPCSTR lpszFormat, ... )
ATLTRACE2( exp );
ATLTRACE2(
DWORD category,
UINT level,
LPCSTR lpszFormat,
...
);
TRACE()的效果如图2-23所示。可以看到,TRACE()和printf()的使用方式一样。只不过它的输出不是标准输出设备,而是Visual C++的输出窗口。
<DIV>TRACE()语句输出调试信息至输出窗口
</DIV><DIV>
TRACE()语句
</DIV>
图2-23 使用TRACE()输出调试信息
断言ASSERT用于检查一些“不应该”发生的情况。ASSERT的函数原型如下:
ASSERT(
booleanExpression
)
ASSERT的含义就是“条件booleanExpression必须得满足”(即条件bExpression为true),如:
int a = 3, b = 4;
int c = a + b;
ASSERT(c == 7);
“条件booleanExpression一定得满足”,那么,“不满足”会怎么样?当ASSERT 断言的条件bExpression为false的时候,Visual C++将会给出红色的警告,如图2-24所示。
图2-24 ASSERT窗口
此时,我们可以单击【终止】按钮以终止该程序;单击【忽略】按钮以继续执行后面的语句;如果要跟踪进去查看错误源,则单击【重试】按钮,这样的话程序将会转至发生ASSERT错误的代码行,并暂停程序执行。
提示
TRACE()和ASSERT()宏只有在调试版本(即_DEBUG宏被定义)时才能奏效。对于Release版本,TRACE()和ASSERT()宏没有任何作用。
此外,Visual C++调试器提供了对内存泄漏的检测功能,考察如下一段包含内存泄漏的C++程序:
【程序 2‑2】一段包含内存泄漏的程序
01 #include "stdafx.h"
02
<DIV>new出来的对象没有析构
</DIV>
03 int main()
04 {
05 int * ip = new int;
06 return 0;
07 }
运行如上包含内存泄漏的程序时,可以看到Visual C++的输出窗口产生如下内容,如图2-25所示。
图2-25 Visual C++中内嵌的内存泄漏检测
其明确地输出内存泄漏的信息:
Detected memory leaks!
Dumping objects ->
{80} normal block at 0x003E2A20, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
光盘导读
该项目对应于光盘中的目录“\ch02\MemleakTest”。
虽然通过调试窗口,我们可以很明显地看到内存泄漏的所在(一个new出来的整形变量所占用的4个字节没有释放),但是针对稍微庞大一点的项目而言,如上的这种信息似乎也只能起到提醒的作用,程序员很难定位到程序的出错点。这就需要更高的内存处理和调试技巧,第3.5节“智能指针(smart pointer)”将会介绍如何采用智能指针避免程序中的内存泄漏问题。
MSDN参考
欲在MSDN中查看相关信息,可使用关键字:“MFC,内存管理”。
参考:
把脉VC++ [ 华初网推荐 ]
virtual C++ IDE输出 宏 谷歌
- 熟悉Visual C++ IDE
- Visual Studio IDE写C程序
- C语言从认识到熟悉 - 1(C到底是什么、以及IDE地址)
- Visual Studio IDE也可以写C程序
- Visual Studio 2012 IDE 对C/C++显示混乱
- 【Visual Studio】 IDE Notes
- C/C++ IDE之C-Free(配置GCC、Visual C++、Borland C++编译器)
- C++STL快速熟悉
- 第一章-熟悉Objective-C
- 第一章 熟悉Objective-C
- 熟悉objective-c
- 磨刀不误砍柴工-先熟悉一下Visual Studio
- C&C++搭建环境——微软IDE:Visual Studio
- Visual Stdio IDE 与 Visual Stdio Code
- Visual Studio IDE 快捷键一览
- Visual Studio IDE 技巧(快捷键)
- visual studio 2003 IDE 几个问题
- Visual Studio IDE 常用功能
- 各种排序算法的稳定性
- Linux-(6)Vi/Vim的基本操作
- iphone 持久性存储
- Java中enum用法详解
- SQlite的使用
- 熟悉Visual C++ IDE
- android DrawerLayout实现仿QQ侧滑菜单
- ArcGIS教程:ArcGIS中的栅格计算
- 3D坐标变换之自转公转
- 整数划分
- 智能设备安全吗—Synack逆向Dropcam过程整理
- 数据库学习笔记系列(6)——等值与非等值连接查询
- 北大青鸟北科教学本部
- 数据结构之二叉查找树(BST)-(六)