是否有任何 C 编译器可以让您阻止特定库和函数的使用?

Are there any C compilers which let you block the usage of specific libraries and functions?

有谁知道是否有任何 C 编译器可以阻止使用特定的库和函数?

例如,假设我想阻止对 float.h 的访问并试图编译一个包含“#include”的程序。我希望编译失败并显示某种消息表明这是因为无法包含 float.h。

或者,如果我想在 math.h 中阻止对 sqrt() 和 pow() 的访问,但包含该库中的所有其他函数,那么一个包含 "double hold = pow(2.0, 3.0);" 行的程序不会编译并且会磨损正在调用的阻塞函数。

我试过在线搜索类似的内容,但我不认为我知道要搜索的正确术语,因为我似乎找不到与我实际寻找的内容相关的任何结果。

例如,对于 gcc,您可以执行以下操作来防止某些包含:

  1. 为您希望失败的每个 header 创建一个失败存根:

float.h:

#error "You must not include me"
  1. 确保这些存根将覆盖您的系统库:

    $ export CPATH=$PWD
    

编译试图在此环境中包含 "float.h"<float.h> 的 c-file 将失败。

当然,这是可以规避的。您只需要手动声明在缺失的 header 中声明的函数。

更好的选择可能是创建一个全局包含 (-include),您可以在其中 #pragma GCC poison 所有不应在程序中的任何地方使用的符号。

您还可以使用 nm 检查装箱的 object 文件,寻找您不希望 c librard 解析的未解析符号,如果找到此类符号,则停止构建。