VC的使用技巧

http://bbs.ednchina.com/BLOG_ARTICLE_284950.HTM

http://blog.csdn.net/morewindows/article/category/863841

http://www.cnblogs.com/cy163/archive/2010/12/15/1907245.html

上面的网址是一些关于VC++6.0的集成开发环境IDE的使用技巧的一些总结。工欲善其事必先利其器。熟练掌握开发工具可以提高开发的效率。

虽然,目前来看,业界使用的最多的C++的IDE应该是VS10版本。但是熟悉以前的版本,对我们掌握新版本也会有莫大的帮助。所以这篇文章,仍然是以VC6.0为基础进行讲解的。稍后,我会用新的博文来记录VC10.0的学习。

VSS是Visual C++的版本控制组件。一个功能强大的IDE会有很多的组件,帮助开发者更好的以软件工程的角度来开发和管理自己的项目。Elicpse在这方面就很好。并且开发者还可以自己开发适合自己的组件。

VC++首先编译资源。将当前的资源编译成二进制格式,并存储在.aps文件中。.res就是二进制的资源文件。

.pch是预编译的头文件,因为这部分代码很少变动。因此预编译一次后,不修改这些代码的话,以后就会直接使用,不用在重新编译这些代码。StdAfx.h是预编译文件。提供了系统常用但是不经常更改的标准头文件。

VC的调试与输出窗口包含了Build(编译)Debug(调试)Find in Files(在文件中查找)Result(结果)和SQL Debugging(SQL调试)等信息输出窗口。

类向导是Ctrl+W打开。Automation用于为自动化添加方法和属性。ActiveX Events用于为ActiveX控件添加事件。ClassInfo:显示工程中类的信息。

常用的调试技巧:

在调试状态下,F10是进行单步运行程序。Watch窗口可以查看变量或表达式的值。

Call Stack(调用栈)窗口是显示程序中已经被调用但尚未返回的函数。

Memory窗口:需要内存地址。用于显示该地址所指的地方的内容。

Variables窗口:实时显示变量的值。

Auto(自动):显示了应用程序中当前语句及前一语句所含变量的值。

Locals(本地):显示当前函数的局部变量值。

this(this指针):显示了this指针所指向的对象的信息。

Registers窗口:显示当前CPU各个寄存器的值。

Disassembly窗口,先死了源代码的反汇编代码。

这些窗口都可以在调试状态时,通过Debug工具栏上的Disassembly按钮激活该窗口。

变量的命名最好以该变量的类型名称的缩写的小写形式开头

变量为类的成员,通常以m_开头。

枚举类型的变量只能用枚举常量进行赋值。

移位运算符代替乘除法效率更高。(左乘右除)和汇编中用XOR(异或)来清空CPU寄存器效率更高。

sizeof:加数组名用来求数组的大小。

在C++中为函数编写的注释的形式通常是这样的。

/*说明函数的作用
*说明函数的返回值
*函数名
*参数列表
*作者和编写时间
*/
在Java中专门提供这种注释方式/**    */   个人觉得Java中的JavaDoc工具非常有用。他就是根据上诉注释方式来生成的代码文档。

模版函数:代码如下

模版函数的语法抽象:

template <class T > T func (T par1, T par2)
{

}
下面是一个求最大最小值的模版函数。

template <class T> T myMax (T value1,T value2)
{
	const type_info & tp = typeid(T);//获取数据类型T的信息
	cout<<"T:"<<tp.name()<<endl;//显示T的数据类型
	return value1>value2 ? value1:value2;//返回最大值。
}
不定参数函数:最典型的不定参数函数是printf函数和scanf函数。

在使用不定参数函数时,必须要包含头文件#include <stdarg.h>

程序示例如下:

double AverageSalary (int EmployeeTotal,...)
{
	double SalaryTotal=0.0;
	double Salary=0.0;
	int n=EmployeeTotal;

	va_list ap;
	va_start(ap,EmployeeTotal);
	while(n--)
	{
		Salary=va_arg(ap,double);
		SalaryTotal+=Salary;
	}
	va_end(ap);

	return (SalaryTotal ?(SalaryTotal/EmployeeTotal):0);
}

他好像是将栈定位到存储参数的地方,然后根据第一个参数的个数来取出栈中存储的参数。记住其函数形式如下:
返回值类型 func(参数列表,...)//最后三个句号,表明不定参数。
指向函数的指针:

在声明一个指向函数的指针时,需要描述该指针所指向函数的参数类型,以及函数返回值类型。

示例程序如下:

int myMax(int a, int b)
{
	return a>b?a:b;
}

int myMin(int a, int b)
{
	return a<b?a:b;
}
int (*pFunction)(int , int );
int a=123,b=456;
pFunction = myMin;
cout<<"a和b的最小值为:"<<(*pFunction)(a,b)<<endl;
pFunction=myMax;
cout<<"a和b的最大值为:"<<(*pFunction)(a,b)<<endl;

类内的成员默认为私有成员。结构体中的成员默认为共有成员。保护类型的成员:只允许类本身的代码对其进行访问,而类以外的代码无法访问保护类型的成员。继承时,默认继承方式为public继承。

在调试时,一种非常有用的注释方法是

/*


//*/
这种方式非常容易去掉,在开头的注释处,改成单行注释就可以了。


条件编译指令:有选择性的对源程序的部分代码进行编译。常见的条件编译整理有#if、#else、#elif和#endif

条件编译代码部分使用#if开头,并使用#endif结束。如果#if后的常量表达式为真,则编译该部分代码,否则不编译该部分代码。

保留字defined用于判断一个标识符是否已经被#define所定义,如果被定义则defined为真,否则为假。

条件编译指令#ifdef和#ifndef也是用于测试标识符是否被#define定义,不推荐使用。

#define RETURNMAX 0
#define RETURNMIN 1
#define RETURNM RETURNMAX

int myM(int a, int b)
{
#if(RETURNM == RETURNMAX)
	return a>b?a:b;
#else
	return a<b?a:b;
#endif
}
可以使用宏来控制这个函数被编译的部分,不同的部分代表不同的功能。

在调试程序时,常常采用下面的结构:

#define _DEBUG
{
#if defined(_DEBUG)
	调试信息
#endif
}

在程序调试完毕之后,可以把#define _DEBUG语句删除。

异常处理

try
{
     正常执行语句块
}
catch(异常声明)
{
     语句块2
}
一个特定类型的异常使用throw表达式引发,语法形式如下:

throw 运算表达式
代码示例如下:
	try
	{
		throw "字符串异常";
	//	throw 123;
		cout<<"正常执行1"<<endl;
	}
	catch(const char*s)
	{
		cout<<s<<endl;
	}
	catch(int i)
	{
		cout<<i<<endl;
	}
	cout<<"正常执行2"<<endl;


(不定期更新)







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值