对于该特定文件,您可以删除除<stdlib.h>
(需要abort()
)之外的每个标题,但您将添加<stdint.h>
到 get uint8_t
。
#include <config.h> // Remove
#include <sys/types.h> // Remove
#include <sys/param.h> // Remove
#include <sys/socket.h> // Remove
#include <netinet/in.h> // Remove
#include <arpa/inet.h> // Remove
#include <ctype.h> // Remove
#include <stdio.h> // Remove
#include <stdlib.h> // Keep
#include <string.h> // Remove
#include <stdint.h> // Add
不需要我能看到的其他人,当我测试它时,GCC 同意我的看法。
我不确定引入了哪个标题uint8_t
;最有可能的是<sys/types.h>
,但 C 标准说<stdint.h>
这样做(或<inttypes.h>
这样做)。
您还应该有一个声明函数的头文件,并且该头文件应包含在此文件中以确保函数声明和定义一致,并且该头文件应包含在使用该函数的每个源文件中。显然,这是#include
源文件中的另一行。
一般来说,如果一个文件使用<config.h>
(或者,更常见的是,"config.h"
),那么您需要使用配置工具(通常是autoconf
或automake
)或configure
工具生成的脚本来创建config.h
头文件。在这个文件中,没有受配置头影响的条件代码,因此可以将其删除。
清理标题列表后,您可以像对待项目中的任何其他源文件一样对待该文件。最好将其编译为添加到构建中的单独目标文件(不需要特殊选项)。这就是你makefile
似乎做得很好的事情。有时,在另一个源文件中包含一个源文件(而不是头文件)是明智的或必要的。但是,合理的次数受到严格限制。