Java和C#在某种程度上都“源自于”C++,但这些语言在发展过程中也相互借鉴。C++也在不断进化着,C++11的出现和广泛支持让我们需要重新认识一下这门“古老”语言的新面貌。另外,通过对比Java和C#,我们或许能够对这些语言有更深入的认识。
继续阅读 »
最近项目接近尾声,基本都是在fix bug,今天说说一个bug,是由于strncat函数使用不当导致命令行输出有乱字符。虽说只是一个很简单的小问题,但是不弄明白就是大问题。
1 strncat声明
```c
char *strncat(char *dest, const char *src, size_t n)
继续阅读 »
什么是Check
Check是C语言的一个单元测试框架。它提供一个小巧的单元测试接口。测试案例运行在各自独立的地址空间,所以断言失败和代码错误造成的段错误或者其他的信号可以被捕捉到。另外,测试的结果显示也兼容以下这些格式:Subunit、TAP、XML和通用的日志格式。
Check is a unit testing framework for C. It features a simple interface for defining unit tests, putting little in the way of the developer. Tests are run in a separate address space
继续阅读 »
身为iOS 的leader最近“不务正业”的去了解了一下有关JS的底层,深有感触的想写一些有关JS数组底层的东西,所以这篇文章就出来了。。
最了几年的程序员,最大的体悟就是你要不断的学习,终生学习才不会让自己退步或者说是脱落。好吧,闲话不说直接进入主题吧。
继续阅读 »
#if __cplusplus >= 201103L
#include
#else // __cplusplus >= 201103L
#include
#endif // __cplusplus >= 201103L
继续阅读 »
TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的。
在linux/mac下的实现
使用signal 捕获异常信号
使用sigsetjmp保存现场寄存器和信号掩码,出现异常后使用 siglongjmp 跳转到异常处理过程,并恢复状态
使用线程局部存储维护 sigjmpbuf 寄存器现场状态堆栈,保证多线程安全,并且可以实现多层嵌套捕获处理。
在windows下的实现
这个就不用多说了,在vs下直接用 try、except 关键字就行了,如果在mingw下编译, 通过 setjmp实现也很方便。
具体使用
注: 由于使用setjmp 进行寄存器现场保护, 如果使用整型局部变量,
继续阅读 »
一个程序在运行过程中,函数调用时会向栈压入: 原来寄存器ebp的值, 参数, 以及调用函数的下一个指令地址
在调用一个函数时, 编译器就计算好函数需要的空间, 然后esp = ebp-需要的空间, 通过ebp+偏移量来访问. 在函数里调用另外一个函数时, 原来fun的ebp值压栈
继续阅读 »
所有的指针在赋值为NULL、一个引用(地址)或者另一个指针之前都是未被初始化的。
当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内存空间。因此在使用指针之前,必须给它赋予一个已分配的内存地址。使用指针的时候一定要注意,不能对未初始化的指针取值!!
继续阅读 »
今天想和大家分享的是命令模式。下面还和之前一样,先给出基本的定义。
命令模式(Command) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或纪录请求日志,以及支持可撤销的操作。
那么让我们简要的说一下命令模式的特点:
1. 它能比较容易地设计一个命令队列;
2. 在需要的情况下,可以较容易地将命令记入日志;
3. 允许接收请求的一方决定是否要否决请求;
4. 可以容易地实现对请求地撤销和重做;
5. 新的命令类不影响其他的类,因此增加新的命令类很容易;
6. 把请求一个操作的对象与知道怎么执行一个操作的对象分隔开;
继续阅读 »
Here is a simple example, what is the output of this program?
```
include
using namespace std;
int main()
{
float f = 0.0;
int i = 5;
f = (float)i;
cout<
继续阅读 »