长歌行

少壮不努力,老大徒伤悲

C++中宏的使用技巧

都是常用技巧,经常用C++的应该都会注意到一两条,为综合整理,非个人独创,从开源代码以及书本论文中抄过来的,数目链接http://blog.csdn.net/iuhsihsow/article/details/7222093如有雷同,纯属巧合。


直接上代码,这次归纳了6点

// Maro.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <string>
using namespace  std;

// 宏的用法

// 1.因为宏是在编译时进行简单的替换,所以很多时候使用宏在突出
//   重点参数的同时,也会提高效率。
#define MAXHEIGHT  100.0
// 不过自定义单位一般使用typedef
typedef int SYSINT;

// 2.短小实用的语句
#define SAFE_DELETE(p)		{if(p) delete p; p = NULL;}
#define SAFE_RELEASE(p)		{while(p->Release()>0); p = NULL;}

// 3.类的导出的声明,因为编译时会报错,所以先全部注释掉
//#ifdef MODULE_EXPORTS
//#	define MODULE_API __declspec(dllexport)
//#else
//#	define MODULE_API __declspec(dllimport)
//#		ifdef	_DEBUG
//#			pragma comment(lib, "Moduled.lib")
//#		else
//#			pragma comment(lib, "Module.lib")
//#		endif
//#endif

// 4.一些编译时的条件语句
#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0600     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif


// 5.实用的小函数
// 例如计算某函数的运行时间
#define BEGIN_TIME	\
	UINT start = GetTickCount();	

#define END_TIME(total)	\
	total = GetTickCount() - start;\

//当然也可以
#define USE_TIME(used, fuc)	\
	UINT begin1 = GetTickCount();\
	fuc;\
	used = GetTickCount() - begin1;\

// 6.定义基类,派生类的接口,这样可以减少修改量,突出接口 ##表示连接
#define INTERFACE_Creature(terminal) \
	public:							 \
	virtual void SetName(const string& strName)	##terminal\
	virtual bool GetName(string &strName) ##terminal

#define BASE_Createture		INTERFACE_Creature(=0;)
#define Divd_Createture		INTERFACE_Creature(;)

class BaseClass
{
	BASE_Createture;
};

class DivdClass : public BaseClass
{
	Divd_Createture;
};

bool DivdClass::GetName(string& strName)
{
	return true;
}

void DivdClass::SetName(const string& strName)
{

}

void Dosth(int time = 500)
{
	Sleep(time);
}

int _tmain(int argc, _TCHAR* argv[])
{
	//1
	double dLength = 50.0;
	if (dLength > MAXHEIGHT)
	{
		// do sth
	}

	//2
	double *p = new double[100];
	SAFE_DELETE(p);

	//3
	//略

	//4
#ifdef DOSTH
	//DO STH
#endif
	
	//5
	int useTime;
//我们可以这样
	BEGIN_TIME
		Dosth();
	END_TIME(useTime);
//还可以这样
	USE_TIME(useTime, Dosth())
	printf("Used time is %d\n", useTime);

	//6
	BaseClass *pD = new DivdClass;
	pD->SetName("test");
	SAFE_DELETE(pD);	// 学而时习之,不亦说乎
	return 0;
}



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iuhsihsow/article/details/8731387
个人分类: C、C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭