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

时间:2016-05-18 15:14:33

标签: c compilation c-preprocessor

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

例如,让我们说我想阻止访问float.h并尝试编译一个具有" #include"的程序。我希望编译失败,并且某种消息表明它是因为不能包含float.h。

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

我已尝试在线搜索此类内容,但我不认为我知道要搜索的正确字词,因为我似乎无法找到与我所做的相关的任何结果。我实际上正在寻找。

1 个答案:

答案 0 :(得分:4)

例如,使用gcc,您可以执行以下操作来阻止某些包含:

  1. 为每个要失败的标头包创建一个失败的存根:
  2. <强> float.h时:

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

      $ export CPATH=$PWD
      
    2. 编译试图在此环境中包含"float.h"<float.h>的c文件将失败。

      当然,这是可以避免的。您只需要手动声明在缺少的标题中声明的函数。

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

      您还可以使用nm检查包含您不希望由c librard解析的未解析符号的crated对象文件,并在找到此类符号时停止构建。