摘自Google开源项目风格指南-C++风格指南

1.#define保护
使用#define防止头文件被多重包含

#ifndef <PROJECT>_<PATH>_<FILE>_H_
#define <PROJECT>_<PATH>_<FILE>_H_

#endif // <PROJECT>_<PATH>_<FILE>_H_

举个栗子~:

#ifndef STDIO_H_
#define STDIO_H_

#include <stdio.h>

#endif //stdio.h

2.函数参数的顺序
定义函数时, 参数顺序依次为: 输入参数, 然后是输出参数。

3.在 #include 中插入空行

以分割相关头文件, C 库, C++ 库, 其他库的 .h 和本项目内的 .h 是个好习惯。

举个栗子~:

#include “foo/public/fooserver.h” // 优先位置

#include <sys/types.h>
#include <unistd.h>
#include <hash_map>
#include <vector>

#include “base/basictypes.h”
#include “base/commandlineflags.h”
#include “foo/public/bar.h”

4.通用命名规则
(1)函数命名,变量命名,文件命名要有描述性;少用缩写。
尽可能给有描述性的命名,别心疼空间,毕竟让代码易于新读者理解很重要。
不要用只有项目开发者能理解的缩写,也不要通过砍掉几个字母来缩写单词。

举个栗子~:

int price_count_reader; // 无缩写
int num_errors; // “num” 本来就很常见
int num_dns_connections; // 人人都知道 “DNS” 是啥

(2)类型名称的每个单词首字母均大写, 不包含下划线: MyExcitingClass, MyExcitingEnum.

举个栗子~: 继续阅读摘自Google开源项目风格指南-C++风格指南

如何将Sublime Text中的代码以彩色高亮形式复制到博客或word文档里

一、安装插件sublimehighlight
1.打开https://github.com/n1k0/SublimeHighlight,点击右下方的download zip。
2.下载后解压缩。打开 Sublime Text,点击Sublime Text -> Preferences -> Browse Packages。

960B4388-4E33-4020-AC07-8A54E989955B

3.弹出Packages 窗口,将刚刚解压后的文件夹拖入 Packages 文件夹。
4.点击 Sublime Text -> Preferences -> Package Settings ->SublimeHighlight ->Settings – User
F1BCFD31-3751-44C2-9E68-177512375563
5.将以下内容复制进配置文件中并保存。
{
    “theme”: “friendly”,
    “linenos”: “inline”,
    “noclasses”: true,
    “fontface”: “Menlo”
}

二、使用方法
选中代码并右键,选择copy as HTML(html 格式) 或者 copy as RTF(富文本格式)
【如果需要复制到博客里就用 html 格式,如果是要复制到 word 文档里,就用富文本格式】,然后到其他地方粘贴即可。
55043519-EBF5-4CF6-AAD0-EA7809651431

三、主题更换
该插件自带的格式有:
  • autumn
  • borland
  • bw
  • colorful
  • default
  • emacs
  • friendly
  • fruity
  • manni
  • monokai
  • murphy
  • native
  • pastie
  • perldoc
  • rrt
  • tango
  • trac
  • vim
  • vs

它们的样式如图:

762C1FEA-A93C-4AA9-8828-242F4986004D

更换它们的方式是:
打开配置文件Sublime Text -> Preferences -> Package Settings ->SublimeHighlight ->Settings – User
“theme”: “friendly”,
中的 friendly 修改为以上任意一种主题的名称,保存即可。
如:
“theme”: “vim”,

《Macbook Pro概要》- Mac的各种功能使用方法

  • 使用AirDrop共享文件(通过 Wi-Fi 在 Mac 或 iOS 设备之间快速传输文件)
打开方式:
Mac:打开Finder后左边侧栏有AirDrop。(如果没有,可以Finder -> 偏好设置 -> 边栏 -> 勾选AirDrop)
iPhone:上拉菜单栏里面有AirDrop。
使用方法:
①先在电脑和手机都打开AirDrop
电脑发给手机:将要发送的文件拖放到要发送的设备的头像上面
|| 手机发给电脑:在图片/视频等文件界面APP上点分享,然后点对应的设备的头像

  • Thunderbolt雷电接口(thunderbolt是由Apple和Intel共同开发的新一代传输接口,双向传输、10Gbps带宽)
1.外部显示器:使用 Mini DisplayPort 转 VGA 转换器,将显示器连接到 MacBook Pro 上的 Thunderbolt 端口
2.买根转接线,就能连网线
3.有的相机厂商的设备支持雷电接口,可以用雷电接口传输照片视频
4.多显示器支持,由于可以单端口连接 6 个设备,理论上,你可以组织7屏工作平台了。
5.连接外置硬盘,速度近800Mb/s
6.连接 VGA 显示器或投影仪。 使用 Mini DisplayPort 转 VGA 转换器,将显示器连接到 MacBook Pro 上的 Thunderbolt 端口

  • HDMI端口(连接HDTV和投影仪)
能够轻松连接 HDTV 和投影仪,通过 HDTV 上的高清分辨率和多通道音频来播放影片和演示文稿等内容。
方法:连接 HDMI 显示器或 HDTV。将 HDMI 的电缆直接插入 MacBook Pro 上的 HDMI 端口。

  • 使用Spotlight搜索(Control + 空格键)
可以搜索任何内容。包括Mac上面的内容,维基百科、地图、新闻、电影、放映时间等。

  • Time Machine(为了保持文件安全,定期对Mac进行备份)
打开方式:
使用AirPort Time Capsule(单独销售) 或者 其他外部储存设备(例如移动硬盘、小米路由器【不过这个只能备份不能还原】) 连接电脑
系统偏好设置 -> Time Machine -> 开
使用方法:
  1.  自动备份您整台 MacBook Pro,包括系统文件、应用程序、帐户、偏好设置、音乐、照片、影片和文稿。
  2. 记住电脑在任意指定日期的状态,以便您可以重新访问 MacBook Pro 过去的状态,或者取回较旧版本的文稿。
  3. 您可以从 Time Machine 备份中恢复整个系统。因此,如果 MacBook Pro 出现了任何问题,您的文件都将安然无恙。

  • 使用 Handoff 跨设备间继续未完成的工作
支持的原生应用包括邮件,备忘录,联系人,日历,Safari,提醒事项,信息,地图,Pages,Numbers 和 Keynote。
打开方式:
Mac:系统偏好设置 -> 通用 -> 允许在这台 Mac 和 icloud 设备之间使用 Handoff
iPhone:设置 -> 通用 ->  Handoff&建议应用 -> 打开 Handoff
使用方法:
打开蓝牙(所有的苹果设备都需要登录同一个 iCloud 账号。)
手机切换到电脑:在iphone上编写邮件/备忘录等,在 Mac 上会出现一个独立的 dock 栏。在这个新的独立 dock 栏中展示了 iPhone 邮件/备忘录等的图标。在 Mac 上打开邮件/备忘录等,你就可以看到刚刚自己在 iPhone 上写了什么东西。
|| 电脑切换到手机:在Mac上编写邮件,在iPhone锁屏界面的左下角会显示邮件的图标,像打开相机快捷方式般上拉即可进入邮件应用。另一个方法是通过应用切换(多任务切换)界面可以看到邮件应用正在被使用。
 

 
  • 家人共享(家人之间可iCloud账户不同)
打开方式:
系统偏好设置 -> iCloud -> 设置家人共享
使用方法:
通过家人共享iTunes Store 、 APP Store 和 iBooks Store里的购买项目
还可以共享照片、家庭日历、提醒事项和位置等

  • AirPrint无线打印
可以使用无线打印的条件:
  • Wi-Fi 网络中支持 AirPrint 的打印机  
  • 一台网络打印机,或 Wi-Fi 网络上其他 Mac 所共享的打印机
  • 连接到 AirPort 基站 USB 端口的打印机

  • AirPlay (通过 AirPlay 镜像在电视机上显示 MacBook Pro 屏幕)
如果您的 HDTV 已连接到 Apple TV, 并且 Apple TV 与 MacBook Pro 处于同一个 Wi-Fi 网络,您可以将 MacBook Pro 显示屏镜像到电视屏幕,或将 HDTV用作第二台显示器。

C语言中二级指针的作用

C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。
1.当不用指针时,参数传入子函数的过程为值传递,子函数中修改的局部变量的值对原来的实参并没有影响。
2.当用一级指针时,参数传入子函数的过程为地址传递,子函数的实际操作是对指针的操作,那就可以通过子函数中对于实参指针的修改达到修改实参的值的目的。
我们通过传递指针来达到修改一个值的目的。那么当你 需要修改一个指针的时候 呢,这个时候我们就需要指针的指针(二级指针):
3.当用二级指针时,是为了修改一个指针
int fun() {
    int *p;
    int m;
    m = init1(&p);
    return m;
}
int init1(int **a) {
    *a = malloc(50);
    return 1;
}
fun()函数通过调用init1()函数实现给p分配内存空间的目的。
p为一个指针,&p就是指向指针p的一个指针(二级指针),
通过把&p传递给init1()函数,此时二级指针a=&p,所以说a是指向指针p的一个指针。
那么对于*a的操作,实际上就是对于指针p的操作,达到了修改指针的目的,这样fun()就可以通过init1()函数来分配内存空间了。
  • 关于值传递

指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

计算机编程语言的分类,解释型语言、编译型语言、脚本语言的关系

计算机编程语言的分类:

  • 机器语言(二进制代码)
  • 汇编语言(面向机器的程序设计语言)
  • 高级语言(按转换方式可分为两类:1.编译型语言;  2.解释型语言     ||按照客观系统的描述可分为两类:1.面向过程语言;  2.面向对象语言    ||按照编程范型可分为:1.命令式语言;  2.函数式语言;  3.逻辑式语言;  4.面向对象语言

三种语言的优缺点:

机器语言:
可读性、可移植性差,编程繁杂。
直接执行,速度快,资源占用少;
汇编语言:
不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性,难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试,使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源,目标代码简短,占用内存少,执行速度快。
高级语言:
运行速度基本上比直接用汇编写的慢,速度和程序大小与编译软件有关。
高级语言接近算法语言,易学、易掌握,级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;高级语言远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高;由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。

高级语言的分类:

  • 按转换方式可分为两类:1.编译型语言;  2.解释型语言
    1.编译型语言:
    编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
    2.解释型语言:
    解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
    现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。
    关于脚本语言
    脚本语言是一种解释性的语言,脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本语言一般都 有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。脚本语言一般都是以文本形式存在,类似于一种命令。

举例:

解释性语言:Java、JavaScript、Perl、Python、Ruby、MATLAB 等。
编译性语言: C/C++、Pascal/Object Pascal(Delphi)
脚本语言:Python、JavaScript,ASP,PHP,Perl


 

  • 按照客观系统的描述可分为两类:1.面向过程语言;  2.面向对象语言

1.面向过程语言:
面向过程语言是以过程或函数为基础的,这种语言对底层硬件,内存等操作比较方便,但是写代码和调试维护等会很麻烦。例如:c语言
2.面向对象语言:
面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。
面向对象语言的发展有两个方向:一种是纯面向对象语言,如Smalltalk、EIFFEL等;另一种是混合型面向对象语言,即在过程式语言及其它语言中加入类、继承等成分,如C++、Objective-C等


 

  • 按照编程范型可分为:1.命令式语言;  2.函数式语言;  3.逻辑式语言;  4.面向对象语言
    1.命令式语言:
    命令式程序设计语言是基于动作的语言,以冯诺依曼计算机体系结构为背景。机器语言及汇编语言是最早的命令式语言。在这种语言中,计算机被看做是动作的序列,程序就是用语言提供的操作命令书写的一个操作序列。用命令式程序设计语言编写程序,就是描述解题过程中每一步的过程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。Fortran、ALGOL、COBOL、C、Ada、Pascal等都是命令式程序设计语言。
    2.函数式语言:
    函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如 Lisp、Haskell、ML、Scheme 、F#等。
    3.逻辑式语言:
    这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最著名的逻辑式语言是 Prolog。
    4.面向对象语言:
    现代语言中的大多数都提供面向对象的支持,但有些语言是直接建立在面向对象基本模型上的,语言的语法形式的语义就是基本对象操作。主要的纯面向对象语言是 Smalltalk。

《疯狂的程序员》中的专业名词

作为刚入大一的我表示上面很多基本专业名词都看不懂呜呜呜……所以机智的我就一个个去搜词条了……本来是想愉快的看一次小说结果变成了强行被科普名词……情节成了次要……所以一本书看了好几个星期……(可见年少无知的我有多傻……)

Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。


BASIC(Beginners’ All-purpose Symbolic Instruction Code,又译培基),意思就是“初学者通用符号指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种直译式的编程语言,在完成编写后不须经由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。BASIC由Dartmouth学院JohnG.Kemeny与ThomasE.Kurtz两位教授在1965年5月研制出来的。1975年,比尔·盖茨把它移植到PC上。


WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。


IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java等极少数语言。


IDE(Integrated Development Environment,集成开发环境)。IDE集成开发环境(简称IDE)软件是用于程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。该程序可以独立运行,也可以和其它程序并用。例如,BASIC语言在微软办公软件中可以使用,可以在微软Word文档中编写WordBasic程序。IDE为用户使用Visual Basic、Java和PowerBuilder等现代编程语言提供了方便。IDE多被用于开发HTML应用软件。


Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型 继续阅读《疯狂的程序员》中的专业名词