1.3 源码风格
1.3.1 源码结构
除了存储引擎接口文件采用C++,以及少量的嵌入式汇编语言,InnoDB存储引擎绝大部分的代码都采用C语言进行编码实现。其源码结构与另一开源操作系统Linux比较相似,模块划分十分清晰,大部分模块被分解在不同的.c文件中。同时,每个模块的实现放在一个单独的文件夹下,文件的命名规则为“模块名0子模块能名.c”。例如关于B+树索引模块的文件名为btr/btr0xxx.c。
.h头文件与.c文件不同,其统一放在include文件夹下,例如lock模块的头文件位于include/lock0lock.h。在include文件夹下,除了.h文件外,还存在.ic文件。这类文件为每个模块定义了内联函数(非DEBUG模式下)。可以发现在这些文件中,函数的定义都包含宏UNIV_INLINE,该宏的定义位于文件univ.i中,具体定义如下所示。
#if (!defined(UNIV_DEBUG) &&!defined(INSIDE_HA_INNOBASE_CC) && !defined(UNIV_MUST_
NOT_INLINE))
/* Definition for inline version */
#ifdef __WIN__
#define UNIV_INLINE __inline
#else
/* config.h contains the right def for ‘inline’ for the current compiler */
#if (__GNUC__ == 2)
#define UNIV_INLINE extern inline
#else
/* extern inline doesn’t work with gcc 3.0.2 */
#define UNIV_INLINE static inline
#endif
#e ndif