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
}