CWARN.INCL.NO_INTERFACE

ソースファイルにインターフェイスヘッダーが含まれていません

CWARN.INCL.NO_INTERFACE チェッカーはコーディング文体チェッカーです。このチェッカーは、基本名は同じだが拡張子が異なるヘッダーファイルがすべてのソースファイルに含まれているかどうかをチェックします。

脆弱性とリスク

ソースファイルでは、モジュールのインターフェイスとその実装を分離するようにお勧めします。具体的には、実装をソースファイルに配置し、インターフェイスを、基本名が同じヘッダーファイルに配置するようにお勧めします。ただし、コードを変更する場合はこれらのファイルの一貫性を確保してください。ソースファイルにそのインターフェイスヘッダーが含まれていない場合、リンク設定段階や実行時に不整合が発生する可能性があります。

インターフェイスが my_alloc.h ファイルに記述され、実装が my_alloc.c に配置されたカスタムのメモリ割り当て関数があるとしましょう。

my_alloc.h

コピー
void *my_alloc(int size);
void *my_realloc(void *allocated, int size);
void my_free(void *allovated);

my_alloc.c

コピー
void *my_alloc(int size) {
  // implementation of my_alloc function
}

void *my_realloc(void *allocated, int size) {
  // implementation of my_realloc function
}

void my_free(void *allovated) {
  // implementation of my_free function
}

コンパイル時のエラーはいまだに少ない一方で、my_alloc モジュールの実装とインターフェイスの整合性は容易に崩れる可能性があります。これを回避するには、欠落している include ディレクティブをソースファイルに追加してください。

my_alloc.c

コピー
# include "my_alloc.h"

void *my_alloc(int size) {
  // implementation of my_alloc function
}

void *my_realloc(void *allocated, int size) {
  // implementation of my_realloc function
}

void my_free(void *allovated) {
  // implementation of my_free function
}