关闭

C++中宏的使用技巧

2190人阅读 评论(4) 收藏 举报
分类:

都是常用技巧,经常用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;
}



2
0
查看评论

C/C++-技巧-宏

一、宏基础 宏在c/c++中扮演者比较重要的角色,虽然难以阅读和调试的缺点让宏的使用饱受诟病,但是在一些特殊的情况下,使用宏会带来极大的方便,甚至可以实现一些用其他方式无法实现的功能。 在c/c++程序编译的过程中,编译器对宏的处理是在预编译阶段进行的,处理方式的核心思想是:简单替换,编译器并不会对...
  • u011787119
  • u011787119
  • 2016-12-25 18:59
  • 1970

C++ —— 宏对于简化类接口的奇技淫巧

C++,类接口,宏
  • noahzuo
  • noahzuo
  • 2016-04-12 23:33
  • 766

C之奇淫技巧——宏的妙用

一、指定的初始化 很多人都知道像这样来静态地初始化数组: int fibs[] = {1,2,3,4,5} ; C99标准实际上支持一种更为直观简单的方式来初始化各种不同的集合类数据(如:结构体,联合体和数组)。   数组的初始化 我们可以指定数组的元素来进行初始化。这非常有用,特...
  • yang_yulei
  • yang_yulei
  • 2014-06-18 08:39
  • 7277

c/c++宏的使用技巧

宏的主要作用就是简化代码编写,简化一些需要重复编码的地方,以得到看起来更优雅的代码。但宏要用得好并不容易,用的不好很容易引发灾难性的后果。本文会介绍宏比较偏门但又很实用的技巧。首先就是最常用的技巧(http://blog.misakamm.org/p/209):#define MACROCAT( x...
  • u010800064
  • u010800064
  • 2013-12-16 19:53
  • 550

C++奇淫巧技

作者:pyj philippica 链接:https://www.zhihu.com/question/37692782/answer/73302430 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 1.超快速读入 现在快速读入已经不算黑科技了吧,下面这个读入在hdu上面速度...
  • huaweizte123
  • huaweizte123
  • 2017-01-14 13:53
  • 273

C/C++ 宏的高级使用1.0

单个# 引例1.#include<stdio.h>#define P(x) printf("%s=%d\n",#x,x) int main(){ /* #x 的作用就是把x转成"x",转成字符串*/ int a1=10,a2=2...
  • sUb_569
  • sUb_569
  • 2017-01-05 22:45
  • 895

C++ 宏 ##用法

##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符#define test1(i) test(x##i) int main() { int x1=1, x2=2, x3=3; test1(1); //...
  • fox64194167
  • fox64194167
  • 2015-09-22 11:05
  • 2196

C++的日志宏

C/C++的宏是很强大的,比如我们可以实现一个日志宏来做调试,以前在VS2008下写控制台的程序时很喜欢用printf或者cout输出调试信息,但是要是写的程序不是控制台的程序呢?我们就可以用日志宏了,我们利用日志宏将调试信息输出到文件,程序运行完后就可以打开文件查看调试信息了。下面是我的一个例子 ...
  • Willtom
  • Willtom
  • 2014-03-27 16:03
  • 1525

C++ 宏定义中字符串连接操作

转载自:http://kenshinf.blog.51cto.com/1088256/252541关于记号粘贴操作符(token paste operator): ##1. 简单的说,“##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。 ...
  • k1988
  • k1988
  • 2010-05-07 12:42
  • 4951

C语言字符串中使用宏替换

1 背景     在定义一个字符串时,希望有一部分内容可以使用宏替换。当尝试使用如下方式来实现时,发现并不能达到目的。#define XXX programmer char str[] = “I like XXX”;    参考资料[1]提出了使用#符号的方...
  • Q1302182594
  • Q1302182594
  • 2015-07-21 11:04
  • 2640
    个人资料
    • 访问:193325次
    • 积分:3558
    • 等级:
    • 排名:第11000名
    • 原创:105篇
    • 转载:51篇
    • 译文:15篇
    • 评论:37条
    博客专栏
    文章分类
    站长统计