C语言模块化编程的基础是:把所有要隐藏的数据放在C文件中,所有要暴露给用户的信息放在API头文件,作为库和上层应用的桥梁。所以API头文件中的函数声明、数据类型等会被库自身和调用者共享。这就要确保库和上层应用的编译环境对它们有一致的解析,下列可能导致解析不一致的元素要格外注意:
1)char、enum这两个元素会被编译选项改变属性,因此最好不要直接出现在API接口中,如果非要包含,要注意编库和编上层应用时,char的signed/unsigned属性和enum的长度这两个编译器选项须一致。(陷阱篇详述)
2)对API中的struct,用手动填充对齐代替编译器隐藏的自动对齐,以防止库内部与上层应用对成员变量偏移量的解析不匹配。做法是:API头文件中的结构体按成员变量的长度排序,长变量在前,不对齐时手动插入填充字节。如: