一、宏
1. 为什么要有宏
因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。
而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率
2. 宏的问题
缺点:
- 宏没有类型检测,不安全
Functor/Function Object翻译过来就是仿函数,它是通过重载()运算符模拟函数行为的类。也就是说,它不是函数(所以仿函数翻译的很贴切)。因为它重载了()运算符,因此可以像调用函数一样对它进行调用。STL中大量运用了Function Object,也提供了很多预先定义的Function Object。还是从vector遍历举例:
1 | class PrintInt |
仿函数的优点:
1.仿函数是对象,可以拥有成员函数和成员变量,即仿函数拥有状态(states)
2.每个仿函数都有自己的类型
3.仿函数通常比一般函数快(很多信息编译期确定)
在 xcode 上写代码,一定不要在文件中出现中文。否则可能会出现 xcode 无法自动补全、无法跳转的问题
podfile语法参考: https://www.cnblogs.com/lxlx1798/p/14587268.html
1 | source 'https://github.com/Artsy/Specs.git' # 指明依赖库的来源地址 |
1 | 1. 更新指定的第三方库 |
MacOS 10.15.x 新安装 cocoapods 方案:https://zhuanlan.zhihu.com/p/340415647
Linux C 下读取目录要用到结构体 struct dirent
。在头文件 #include <dirent.h>
中
1 | struct dirent { |
注意:部分 linux 文件系统,例如 xfs 不支持 d_type,当使用 d_type 时,所有文件/目录的 d_type 会一直为空,即 0(DT_UNKNOWN)。无法判断文件类型,所以需要 stat 函数。
1 | const char* dir_str = "/proc"; |
默认情况下,GOPATH是不支持go modules 的。在 go env 中查看。设置 export GO111MODULE=on
使用goland 打开项目或创建项目的时候,需要设置 go modules 为 enable。
使用 go mod init module_name
,比如 go mod init github.com/objcoding/testmod
go mod 中初始化第一行就是项目的依赖路径,通常来说该地址就是项目的仓库地址,所以需要项目包的地址都填写这个地址,无论是内部之间引用还是外部引用。
在项目启用啦 go modules 之后,引用包必须跟 go mod 文件第一行包名一样,依赖的包都会保存在 ${GOPATH}/pkg/mod 文件夹中。