?点点废话
最近没有再将rax的源码往下看,rax对于一个新手来说还是体量过大,在尝试自己写写,在写的时候遇到了一些坑,也体会到了rax的一些写法的精妙之处,记录一下。
?宏定义函数的注意点:
我定义了这样一个宏定义函数:
#define radixNthChild(h, n) \
(radix_node**)((char*)&h->data + h->size + padding(h->size) + n * sizeof(void*))
我这样调用这个函数:
radixNthChild(new_cur, new_cur->size - 1)
这样一个调用大家觉得有问题吗?嗯,肯定是有问题的,不然我说啥?。
这里,按照我们一般的调用函数的思路,这样一个调用的运行过程是这样的:
- 计算出new_cur->size - 1
- 带入radixNthChild函数
实际上恰恰相反,宏定义的处理在预编译时(g++ -E)