Intelligence without ambition is a bird without wings.

2015-01-08
makefile-目标all作用

make在执行makefile中,若没有显式指定目标,默认执行第一个找到的目标。

而一般情况下,一个项目都会生成多个目标(如多个lib,dll,exe)等,所以
需要all这个伪目标来生成多个目标。

阅读此文

2015-01-08
makefile-.PHONY作用

先看makefile核心规则

1
2
target: prerequisites
command

make解析执行makefile判断过程:

  • target不存在,则根据prerequisites,执行commond
  • target已存在,则比较targetprerequisites修改时间
    • prerequisites不存在,则不执行commond!
    • prerequisitestarget新,则执行commond(说明在生成target后,对依赖文件进行了修改)
    • prerequisites没有target新,则不执行commond

为什么需要伪目标

  • 假设当前目录下已有clean文件,则根据make解析过程,不会执行后续commond

什么是伪目标(.PHONY)

伪目标相对于目标而言,其不会生成实体文件

伪目标的作用

显式告诉make不要跟实体文件进行关联判断,以便执行相应的命令

阅读此文

2015-01-08
单元测试工具列表

阅读此文

2015-01-08
C运行库链接问题

在同一个项目中,各组件需要保持一致的C运行库链接方式(动态或静态),包括使用的第三方库(第三方库的C库链接方式)
应与项目C库链接方式一致!

参考

  1. http://blog.csdn.net/redline2005/article/details/6313703
  2. http://msdn.microsoft.com/zh-cn/library/abx4dbyh(v=vs.100).aspx
阅读此文

2015-01-07
编译安装google-C++-test-framework

环境

  • VS2010
  • cmake-3.1.0
  • gtest-1.7.0

编译

  • 下载官网,解压

  • 新建build目录,并进入

  • 生成Makefile

    • 静态库(默认C++运行库为静态链接)

      cmake -G "NMake Makefiles" ..
      
    • 静态库,C++运行库采用动态链接

      cmake -G "NMake Makefiles" -Dgtest_force_shared_crt=ON ..
      
    • 动态库(默认C++运行库为动态链接)

      cmake -G "NMake Makefiles"  -DBUILD_SHARED_LIBS=ON ..
      

注:

-   编译示例,`-Dgtest_build_samples=ON`
  • 编译

    nmake
    

注意事项

  • gtest本身的C++运行时库需要和项目保持一致,不然会出现类似msvcprtd.lib(MSVCP100D.dll) : error LNK2005: already defined in gtestd.lib(gtest.obj)

参考

  1. http://stanlearnswindows.blogspot.jp/2010/06/msvcprtdlibmsvcp100ddll-error-lnk2005.html
  2. http://www.cnblogs.com/ShaneZhang/p/3480502.html
  3. http://msdn.microsoft.com/zh-cn/library/abx4dbyh(v=vs.100).aspx
阅读此文

2015-01-07
C-函数返回值与错误处理

除了极少数函数调用不会出错(如getpid(),参考[APUE-8.2]),绝大多数函数都可能发生调用失败。在调用失败时,
就涉及到如何通知调用者,以便调用者进行相对应的错误处理。

错误处理策略

  • 作为调用者希望函数的返回结果就是我们期待的值,但这样报告错误又不方便
  • 若用函数返回值来判断函数的成功或失败,获取期待结果又不方便

所以在C中,往往都采用了折衷的方式,通过使用一个与所有成功结果都不相同的值作为函数失败时的返回值,常见方式有:

  • 失败时返回值

    • 返回NULL指针,如fopen
    • 返回-1
    • 返回非0
    • 某些专用宏,如EOFSOCKET_ERROR
  • 成功时返回值

    • 返回非空指针
    • 返回0
    • 某些专用宏,如SOCKET_SUCCESS

参考

  1. UNIX环境高级编程.W.Richard Stevens / Stephen A.Rago.译者: 尤晋元 / 张亚英 / 戚正伟.ISBN: 9787115147318
  2. The Standard C Library Paperback. July 11, 1992. P.J. Plauger.ISBN-13: 978-0131315099
阅读此文

2015-01-07
封装个人代码

背景

积累平时的代码,方便日后的复用。

采用什么语言封装

采用C++,原因如下:

  • 现阶段主要使用C++,虽然也使用部分C库或系统API

  • 提供默认参数值,使接口美观、易用

  • 提供名字空间,可以防止名字污染

  • 提供多态,使接口美观、易用

封装遇到的问题

  • 代码目录怎么组织?

  • 函数调用出错怎么处理?

阅读此文

2015-01-07
autohotkey获得粘贴板内容

1
2
3
4
5
6
7
8
9
10
11
12
13
; 获取当前选中内容
GetSelectText()
{
tmp = %ClipBoard% ; 保存原来内容
ClipBoard = ; 清空粘贴板
Send, ^c ; 获取当前选中内容
Sleep, 100 ; 确保操作成功
text = %ClipBoard%
ClipBoard = %cmp% ; 复原
return text
}

msgbox % GetSelectText()
阅读此文

2015-01-07
软件设计原则资料

阅读此文

2015-01-06
虚拟网卡资料

阅读此文