区块链技术博客
www.b2bchain.cn

工欲善其事系列之三 :宏的妙用(一切为了偷懒)求职学习资料

本文介绍了工欲善其事系列之三 :宏的妙用(一切为了偷懒)求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 工欲善其事系列简介
  • 前言
  • 如何偷懒
  • 宏的特性
  • 我的偷懒方式
    • 1、指针、返回值检查
    • 2、指针释放销毁
    • 3、单实例类
  • define Singleton(ClassName)

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“defs.h”
《工欲善其事系列之二》中其实也用到了,所以写出来,能够让大家看的明白!

如何偷懒

总结出自己经常重复的工作,抽象简化它们,按照适合自己思维方式,整合成我们自己需要的。
偷懒就是尽可能的少写代码,实现我们需要的效果。
前两篇究其根本也是为了能够尽可能的少写代码,从而节省时间。
一切为了偷懒 看似调侃,其实就是我的本心。** (^▽^) **
所以开始我的偷懒之旅吧!

宏的特性

宏的原样展开特性,对于才接触或者不怎么喜欢使用宏的人来说,宏一般用来定义常量或者类型,仅此而已,比如:

#define  PI  3.1415926 #define  unsigned char  uchar

或者实现一些简单的函数功能,因为没有类型,有时候类似模板一样,可以输入使用不同类型的参数,比如:

#define  add(x,y)  (x+y) #define  sub(x,y)  (x-y) #define  mul(x,y)  (x*y) #define  dev(x,y)  (x/y)

我的偷懒方式

1、指针、返回值检查

平常判断指针,都会类似如下方式:

int ret = 3; int *ptr = &ret;  if (ret == -1)     return;   if (ptr == NULL)     return; 

可能带打印且有返回值,便于快速分析:

int ret = 3; int *ptr = &ret;  if (ret == -1) {     std::cout << "ret:" << ret << std::endl;     return;  }  if (ptr == NULL) {     std::cout << "ptr:" << ptr << std::endl;     return false;  // 或者 -1 }

可以如下实现:

#define check(var, value, ...)      if (var == value) {         logs(var);         return __VA_ARGS__;     }

使用方式如下:

void test1() // 无返回值 {     int ret = 3;     int *ptr = &ret;     check(ret , -1);     check(ptr, NULL); }  int test2() // 有返回值 {     int ret = 3;     int *ptr = &ret;     check(ret, -1, 0);     check(ptr, NULL, false); }

2、指针释放销毁

指针内存释放,一般用自带的 delete 或者有自己的释放函数,假设如 free(),则方式如下:

xxx *ptr = new xxx; ... if (ptr != NULL) {     delete ptr;  // or  free(ptr);     ptr = 0; }

则可简单如下定义:

#define delptr(ptr)             if (ptr) {delete ptr; ptr = 0;} #define freeptr(fun, ptr)       if (ptr) {fun(ptr); ptr = 0;}

对于集合型指针,则可直接如下定义:

#define delptrlist(list)       for (int i = 0; i < list.size(); i++) delete list[i]; list.clear(); #define delptrset(list, type)  foreach (type p, list) delptr(p); list.clear(); #define delptrset11(list)      foreach (auto p, list) delptr(p); list.clear();   // 版本 >= c++11 

3、单实例类

对于类中的一中特殊设计模式,有时候仅仅需要一个对象实例即可,可以直接简单实现如下:
“`

define Singleton(ClassName)

static ClassName &instance() {
static ClassName *m_instance = 0;
if (m_instance == 0)
m_instance = new ClassName;
return *m_instance;

  • 工欲善其事系列简介
  • 前言
  • 如何偷懒
  • 宏的特性
  • 我的偷懒方式
    • 1、指针、返回值检查
    • 2、指针释放销毁
    • 3、单实例类
  • define Singleton(ClassName)

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“defs.h”
《工欲善其事系列之二》中其实也用到了,所以写出来,能够让大家看的明白!

如何偷懒

总结出自己经常重复的工作,抽象简化它们,按照适合自己思维方式,整合成我们自己需要的。
偷懒就是尽可能的少写代码,实现我们需要的效果。
前两篇究其根本也是为了能够尽可能的少写代码,从而节省时间。
一切为了偷懒 看似调侃,其实就是我的本心。** (^▽^) **
所以开始我的偷懒之旅吧!

宏的特性

宏的原样展开特性,对于才接触或者不怎么喜欢使用宏的人来说,宏一般用来定义常量或者类型,仅此而已,比如:

#define  PI  3.1415926 #define  unsigned char  uchar

或者实现一些简单的函数功能,因为没有类型,有时候类似模板一样,可以输入使用不同类型的参数,比如:

#define  add(x,y)  (x+y) #define  sub(x,y)  (x-y) #define  mul(x,y)  (x*y) #define  dev(x,y)  (x/y)

我的偷懒方式

1、指针、返回值检查

平常判断指针,都会类似如下方式:

int ret = 3; int *ptr = &ret;  if (ret == -1)     return;   if (ptr == NULL)     return; 

可能带打印且有返回值,便于快速分析:

int ret = 3; int *ptr = &ret;  if (ret == -1) {     std::cout << "ret:" << ret << std::endl;     return;  }  if (ptr == NULL) {     std::cout << "ptr:" << ptr << std::endl;     return false;  // 或者 -1 }

可以如下实现:

#define check(var, value, ...)      if (var == value) {         logs(var);         return __VA_ARGS__;     }

使用方式如下:

void test1() // 无返回值 {     int ret = 3;     int *ptr = &ret;     check(ret , -1);     check(ptr, NULL); }  int test2() // 有返回值 {     int ret = 3;     int *ptr = &ret;     check(ret, -1, 0);     check(ptr, NULL, false); }

2、指针释放销毁

指针内存释放,一般用自带的 delete 或者有自己的释放函数,假设如 free(),则方式如下:

xxx *ptr = new xxx; ... if (ptr != NULL) {     delete ptr;  // or  free(ptr);     ptr = 0; }

则可简单如下定义:

#define delptr(ptr)             if (ptr) {delete ptr; ptr = 0;} #define freeptr(fun, ptr)       if (ptr) {fun(ptr); ptr = 0;}

对于集合型指针,则可直接如下定义:

#define delptrlist(list)       for (int i = 0; i < list.size(); i++) delete list[i]; list.clear(); #define delptrset(list, type)  foreach (type p, list) delptr(p); list.clear(); #define delptrset11(list)      foreach (auto p, list) delptr(p); list.clear();   // 版本 >= c++11 

3、单实例类

对于类中的一中特殊设计模式,有时候仅仅需要一个对象实例即可,可以直接简单实现如下:
“`

define Singleton(ClassName)

static ClassName &instance() {
static ClassName *m_instance = 0;
if (m_instance == 0)
m_instance = new ClassName;
return *m_instance;

  • 工欲善其事系列简介
  • 前言
  • 如何偷懒
  • 宏的特性
  • 我的偷懒方式
    • 1、指针、返回值检查
    • 2、指针释放销毁
    • 3、单实例类
  • define Singleton(ClassName)

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“defs.h”
《工欲善其事系列之二》中其实也用到了,所以写出来,能够让大家看的明白!

如何偷懒

总结出自己经常重复的工作,抽象简化它们,按照适合自己思维方式,整合成我们自己需要的。
偷懒就是尽可能的少写代码,实现我们需要的效果。
前两篇究其根本也是为了能够尽可能的少写代码,从而节省时间。
一切为了偷懒 看似调侃,其实就是我的本心。** (^▽^) **
所以开始我的偷懒之旅吧!

宏的特性

宏的原样展开特性,对于才接触或者不怎么喜欢使用宏的人来说,宏一般用来定义常量或者类型,仅此而已,比如:

#define  PI  3.1415926 #define  unsigned char  uchar

或者实现一些简单的函数功能,因为没有类型,有时候类似模板一样,可以输入使用不同类型的参数,比如:

#define  add(x,y)  (x+y) #define  sub(x,y)  (x-y) #define  mul(x,y)  (x*y) #define  dev(x,y)  (x/y)

我的偷懒方式

1、指针、返回值检查

平常判断指针,都会类似如下方式:

int ret = 3; int *ptr = &ret;  if (ret == -1)     return;   if (ptr == NULL)     return; 

可能带打印且有返回值,便于快速分析:

int ret = 3; int *ptr = &ret;  if (ret == -1) {     std::cout << "ret:" << ret << std::endl;     return;  }  if (ptr == NULL) {     std::cout << "ptr:" << ptr << std::endl;     return false;  // 或者 -1 }

可以如下实现:

#define check(var, value, ...)      if (var == value) {         logs(var);         return __VA_ARGS__;     }

使用方式如下:

void test1() // 无返回值 {     int ret = 3;     int *ptr = &ret;     check(ret , -1);     check(ptr, NULL); }  int test2() // 有返回值 {     int ret = 3;     int *ptr = &ret;     check(ret, -1, 0);     check(ptr, NULL, false); }

2、指针释放销毁

指针内存释放,一般用自带的 delete 或者有自己的释放函数,假设如 free(),则方式如下:

xxx *ptr = new xxx; ... if (ptr != NULL) {     delete ptr;  // or  free(ptr);     ptr = 0; }

则可简单如下定义:

#define delptr(ptr)             if (ptr) {delete ptr; ptr = 0;} #define freeptr(fun, ptr)       if (ptr) {fun(ptr); ptr = 0;}

对于集合型指针,则可直接如下定义:

#define delptrlist(list)       for (int i = 0; i < list.size(); i++) delete list[i]; list.clear(); #define delptrset(list, type)  foreach (type p, list) delptr(p); list.clear(); #define delptrset11(list)      foreach (auto p, list) delptr(p); list.clear();   // 版本 >= c++11 

3、单实例类

对于类中的一中特殊设计模式,有时候仅仅需要一个对象实例即可,可以直接简单实现如下:
“`

define Singleton(ClassName)

static ClassName &instance() {
static ClassName *m_instance = 0;
if (m_instance == 0)
m_instance = new ClassName;
return *m_instance;

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 工欲善其事系列之三 :宏的妙用(一切为了偷懒)求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们