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
}