lisk中的lisk_type.h定义了若干数据类型:
#define n1 char
#define n2 short int
#define n4 int
#define n8 long long int
#define nw long int
#define u1 unsigned char
#define u2 unsigned short int
#define u4 unsigned int
#define u8 unsigned long long int
#define uw unsigned long int
#define f4 float
#define f8 double
#define fw long double
#define vd void
#define vd_p void*
#define vd_pp void**
上面的类型定义规律如下:
1 n开头代表整形 因为int行变量的匈牙利命名法前缀就是n,据说来自于basic的num或number常用整型变量名称
2 u开头代表unsigned
3 f开头代表float
4 以数字结尾代表变量的内存占用byte数目,w(意思是word)代表不固定内存大小的类型。
如nw是long int,在32位os上其是4字节大小,在64位机上是8字节大小;而fw则是long double,fw在linux上是12个字节,windows上是16个字节。
至于为什么用define而不是typedef关键字来定义不同类型,是因为我有以下工作经历。最简单的,写跨32位与64位的linux程序时候,用头文件stdint.h中的类型定义即可,但是使用printf或者snprintf函数的时候,gcc会给出很多warning甚至是error,所以我就重新定义了数据类型,并使用define关键字来避免这个错误警告。
第二个原因就是,C语言函数的所有变量一般都要在函数开始部分声明,而短小精悍的类型声明可以很容易使得这部分代码整洁划一。
lisk的网络框架lisk_network是一个基于回调函数的异步网络框架。由于lisk是单线程的,所以也可以说它是半异步的网络框架。