繁体   English   中英

C 如果传递包含 function 则抛出编译器警告 (clang)

[英]C throw compiler warning (clang) if transitively included function is used

我有三个类和相应的 header 文件,user.c、foo.c 和 util.c。 util.c 包含 foo.c 依赖的函数,但我更希望 user.c 不调用。 理想情况下,user.c 只会调用 foo.c 中的函数。 现在,user.h/.c 包含 foo.h/.c,foo.h/.c 包含 util.h/.c,因此所有 util 函数都可传递地包含在 user.c 中。

我不需要对用户隐藏 util.c 内容,但我想知道如果 user.c 从 util 调用过某些东西,是否有办法用 clang 抛出编译器错误/警告(或类似的东西) .c。 这可能吗?

我已经看到一些关于 PIMPL 的东西来隐藏私有标头,但宁愿不处理额外的 memory 和其他权衡。

我有以下内容:user.c

#include user.h
foofunction(); //can call both of these just fine
utilfunction(); //would like to have a compiler warning if this is called 

用户.h

#include foo.h

foo.c

#include foo.h
void foofunction(){utilfunction();};

foo.h

#include util.h
void foofunction();

工具.h

#include util.c
void utilfunction();

效用.c

//no includes, just some functions
void utilfunction(){};

对于 C,只要它是全局的,就没有对任何 API/变量的任何保护。 为了不在其他文件中公开 API,您应该:

  • 不应在.h 中包含私有文件。 所有包含都在 .c 文件中执行
  • 如果不希望用户包含 private.h 文件,您可能会创建一个#define并检查 private.h 文件中是否存在,如果不存在则抛出 #error。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM