その特定のファイルについては、<stdlib.h>
(に必要なabort()
)を除くすべてのヘッダーを削除できますが、を取得するために追加<stdint.h>
します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
はソースファイルのもう1行です。
一般に、ファイルで<config.h>
(または、より一般的には"config.h"
)を使用する場合は、構成ツール(通常autoconf
またはautomake
)またはconfigure
ツールによって生成されるスクリプトを使用してconfig.h
ヘッダーを作成する必要があります。このファイルには、構成ヘッダーの影響を受ける条件付きコードがないため、削除できます。
ヘッダーリストをクリーンアップすると、プロジェクト内の他のソースファイルと同じようにファイルを処理できます。ビルドに追加される別のオブジェクトファイル(特別なオプションは必要ありません)としてコンパイルするのが最善です。それはあなたmakefile
が完全にうまくやっているように見えることです。場合によっては、別のソースファイルに(ヘッダーファイルではなく)ソースファイルをインクルードすることが賢明または必要です。ただし、賢明な回数は厳しく制限されています。