其三方应用,宏的使用

以下是进阶篇的始末:面向对象的宏图条件,自动加载类,类型提醒,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代码布置上的多多标题,常见的运用情状有以下两种:

  • 允许用户从NPM服务器下载别人编写的第叁方包到本地使用。
  • 同意用户从NPM服务器下载并设置外人编写的通令行程序到地头利用。
  • 同意用户将自身编辑的包或指令行程序上流传NPM服务器供别人利用。

出于新版的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,算法优先难题

二个乘法的宏

#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中大量运用到

www.5929.com , 

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

  • foo),而开展今后foo的意义就要根据上下文来鲜明了。

对此以下的接力引用,宏体也只会展开三回。

#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宝马X5X(BUFSIZE)会被开展成X_BUFSIZE。因为宏体中富含##,宏参数直接代入宏体。
XAFTEMuranoX(BUFSIZE)会被进行成X_1024。因为XAFTE逍客X(x)的宏体是AFTE奥迪Q5X(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

地点安装

    1. 将安装包放在 ./node_modules 下(运营 npm
      命令时所在的目录),如若没有 node_modules 目录,会在脚下推行 npm
      命令的目录下生成 node_modules 目录。
    1. 可以通过 require() 来引入本地安装的包。

大局安装

    1. 将安装包放在 /usr/local 下。
    1. 可以一贯在指令行里使用。
    1. 不可以透过 require() 来引入本地安装的包。

接下去我们应用全局方式安装 express

$ npm install express -g

卸载模块

我们得以应用以下命令来卸载 Node.js 模块。

$ npm uninstall express

 

卸载后,你可以到 /node_modules/
目录下查看包是不是还留存,大概利用以下命令查看:

$ npm ls

更新模块

小编们能够利用以下命令更新模块:

$ npm update express

探寻模块

动用以下来搜索模块:

$ npm search express

NPM 常用命令

 
  • NPM提供了过多限令,例如installpublish,使用npm help可查看全体命令。

  • 使用npm help <command>可查看某条命令的详实支持,例如npm help install

  • package.json四处目录下使用npm install . -g可先在地面安装当前命令行程序,可用来发表前的当地测试。

  • 使用npm update <package>可以把当前目录下node_modules子目录里边的呼应模块更新至最新版本。

  • 使用npm update <package> -g可以把全局安装的对应命令行程序更新至最新版。

  • 使用npm cache clear可以清空NPM本地缓存,用于对付使用同一版本号公布新本子代码的人。

  • 使用npm unpublish <package>@<version>可以收回公布温馨揭橥过的有个别版本代码。

 

 

 

. npm 的选择,npm使用
NPM是会同NodeJS一起安装的包管理工具,能一蹴即至NodeJS代码安顿上的诸多难题,常见的利用情形有以下两种:
允许用户从…

Leave a Comment.