菜单

宏的使用,使用

2019年2月14日 - 金沙编程资讯

以下是进阶篇的情节:面向对象的规划原则,自动加载类,类型提醒,traits,命名空间,spl的采取,反射的采用,php常用设计格局

其三方的行使,第三方使用

1. MMDrawerController  抽屉效果
2.SVProgressHUD  透明指示层
3.SDCycleScrollView 无限轮播器
4.SDWebImage 异步图片加载
5.RESideMenu 抽屉效果
6.AFNetworking 网络请求
7.MJRefresh tableView上下拉刷新
8.MJExtension json转模型
9.Masonry 布局适配框架
10.UMengSocial 友盟SDK
11.TPKeyboardAvoiding 键盘与输入框的位置修改
12.XYPieChart 饼状图
13.UUChartView 折线图
14.IQKeyboardManager 输入框在键盘弹出的时候处理显示位置

1. MMDrawerController
抽屉效果 2.SVProgressHUD 透明指示层 3.SDCycleScrollView 最好轮播器
4.SDWebImage 异步图片加载 5.RESide…

宏的使用,使用

2. npm 的使用,npm使用

NPM是会同NodeJS一起安装的包管理工具,能化解NodeJS代码安插上的好多难题,常见的应用境况有以下二种:

由于新版的nodejs已经合并了npm,所以前面npm也一并设置好了。同样可以透过输入
“npm -v” 来测试是还是不是中标安装。命令如下,出现版本提醒表示安装成功:

$ npm -v
2.3.0

 ==============================================

前言

宏在C/C++中有挺大的听从。

关键词

 

利用 npm 命令安装模块

npm 安装 Node.js 模块语法格式如下:

$ npm install <Module Name>

以下实例,大家运用 npm 命令安装常用的 Node.js web框架模块 express:

$ npm install express

设置好之后,express 包就置身了工程目录下的 node_modules
目录中,由此在代码中只须要经过 require(‘express’)
的方法就好,无需指定第三方包路径。

var express = require('express');

 

宏的两种功能

1,定义常量

2,定义表明式

3,简化繁琐的代码

4,作为标识符

5,可变参数

6,#和##的使用

 

1,定义常量

比如定义PI的值可以通过宏来定义

#define PI    3.1415927

2,定义表达式

#define MAX(a, b)    (a>b?a:b)

3,简化繁琐的代码

以此可以简化一些重新的代码,比如注解函数,定义类的分子变量,恐怕是简化多次编纂重复性高的代码。

简化函数声明,在函数申明的时候有些要求的第一字须要写,不过过多时候都是如出一辙的,可以因而宏来简化

定义线程函数

unsigned __stdcall ThreadFunc(void* pArguments)

可以透过宏简化为

#define THREAD_FUNC(func)    unsigned __stdcall func(void* pArguments)

THREAD_FUNC(ThreadFunc)
{
    printf("hello\n");
    return 0;
}

 

定义类的积极分子变量,恐怕必要定义成员变量的get,set函数,那时候可以透过宏来简化那些进度。

#define PROP_DECL(ClassName, Prop)    \
    public: ClassName Get##Prop(void){return m_##Prop;}\
    public: void Set##Prop(ClassName vl){m_##Prop = vl;}\
    private: ClassName m_##Prop;

class CTestObj
{
    PROP_DECL(int, Count)
public:
    CTestObj();
    ~CTestObj();
};

地方的代码通过预编译之后就会发生GetCount和SetCount七个函数和m_Count私有成员变量。

简化繁琐代码,在内存释放的时候恐怕要求把指针,须要两行代码

WA *pa = new WA(c);
delete pa;
pa = NULL;

可以行使宏来简化这几个进度

#define MEM_FREE(x)    do \
{\
    delete x;\
    x = NULL;\
} while (0)

WA *pa = new WA(c);
MEM_FREE(pa);

在ATL,MFC中大批量利用到宏来简化代码。

4,作为标识

用作标识的宏在大量的施用

#ifndef __TMP_H__    //判断是否已经定义宏,如果没有,将会执行下面代码,用于避免包含文件的时候重复包含
#define __TMP_H__    //定义宏,这样第二次包含这个头文件的时候就不会执行下面的定义

//判断是否是UNICODE,用于定义TTCHAR的字符类型。
#ifdef UNICODE        
typedef wchar_t TTCHAR;
#else
typedef char TTCHAR;
#endif

//用于标识的宏定义
#define    IN
#define OUT

#endif // !__TMP_H__

 

4,可变参数

宏可以有参数,而且参数数量能够不定

#define LOG(format, ...)    printf(format, __VA_ARGS__)

LOG("hello, %d, %s\n", 10, "nihao");

5,#和##的使用

#的功效是把宏参数变成字符串

#define STR(s)     #s
printf(STR(hello));           // 输出字符串"hello"

##的职能是把宏参数粘贴起来例子能够参见一下第三点的代码。

 

拔取宏必要留意的点

宏是在预处理进程中展开存文本替换,预处理进程中不会对宏进行其他的语法检测,却个括号,少个分行都不会管,所以或然会出现有的很想拿到的失实,所以要慎用。

1,算法优先难点

3个乘法的宏

#define MUL(x, y)    (x * y)

MUL(2,3)的时候没相当,假设是MUL(1+2,
3)的时候就出事了,宏会替换成1+2*3,跟预想的结果就分化了。

那时就需求把宏定义改成

#define MUL(x, y) (x) * (y)

2,分号吞噬难题

#define SKIP_SPACES(p, limit)  \
     { char *lim = (limit);         \
       while (p < lim) {            \
         if (*p++ != ' ') {         \
           p--; break; }}}

若果下面的代码放在判断语句中拔取

if (*p != 0)
   SKIP_SPACES (p, lim);
else ...

编译器会报错,else从前要有if,可以经过上面代码来缓解

#define SKIP_SPACES(p, limit)     \
     do { char *lim = (limit);         \
          while (p < lim) {            \
            if (*p++ != ' ') {         \
              p--; break; }}}          \
     while (0)

那种方法在linux中多量应用到

 

3,重复调用

#define min(X, Y)  ((X) < (Y) ? (X) : (Y))

假定调用时如此

int x = 1;
int y = 2;
min(x++, y);

举行后x++会被调用一次,那种办法要幸免。

 

4,对本人的递归引用

有如下宏定义:

#define foo (4 + foo)

按前面的精晓,(4 + foo)会进展成(4 + (4 +
foo),然后直接举行下去,直至内存耗尽。不过,预处理器选取的方针是只举办一回。也等于说,foo只会举行成(4

对此以下的陆续引用,宏体也只会展开两遍。

#define x (4 + y)
#define y (2 * x)

x展开成(4 + y) -> (4 + (2 * x)),y展开成(2 * x) -> (2 * (4 +
y))。

专注,那是极不推荐的写法,程序可读性极差。

 

5,宏参数预处理

宏参数中若包括其它的宏,那么宏参数在被代入到宏体从前会做两回完全的展开,除非宏体中隐含#或##。

有如下宏定义:

#define AFTERX(x) X_ ## x
#define XAFTERX(x) AFTERX(x)
#define TABLESIZE 1024
#define BUFSIZE TABLESIZE

AFTE奥迪Q5X(BUFSIZE)会被开展成X_BUFSIZE。因为宏体中蕴藏##,宏参数直接代入宏体。
XAFTE冠道X(BUFSIZE)会被开展成X_1024。因为XAFTETiggoX(x)的宏体是AFTE中华VX(x),并不曾#或##,所以BUFSIZE在代入前会被全然展开成1024,然后才代入宏体,变成X_1024。

 

宏实在预处理进度中被互换掉的,所以在实际上的编译进度中,不会现身宏,可能宏的变量名。

 

参考:

前言 宏在C/C++中有挺大的意义。
关键词 宏的二种作用 1,定义常量 2,定义表达式 3,简化繁琐的代码
4,作为标识符 5,可…

大局安装与本土安装

npm
的包安装分为地面安装(local)、全局安装(global)两种,从敲的命令行来看,差距只是有没有-g而已,比如

npm install express          # 本地安装
npm install express -g   # 全局安装

假诺出现以下错误:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

化解办法为:

$ npm config set proxy null

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图