防止使用glibc头文件

时间:2014-11-13 15:57:07

标签: c++ c compilation std

我希望以跨平台和交叉编译的方式阻止在整个代码中使用标准库。

我想到的技巧是创建虚拟std文件并将它们放在包含路径中的最高优先级。

mock stdlib.h示例:

#ifndef __STDLIB_H_BLOCKED__
#define __STDLIB_H_BLOCKED__

#ifndef ALLOW_STDLIB_HEADER
    #error "STD headers are not allowed "
#else
    #include <stdlib.h>
#endif

#endif /* __STDLIB_H_BLOCKED__ */

但这个解决方案存在两个问题:

  1. 我不确定编译器给予-I directoires比glibc include path更高的优先级

  2. 包含stdlib.h的行将导致循环 - 我需要一种方法来包含真正的stdlib.h并且不会导致编译器重新包含我的模拟头文件。

1 个答案:

答案 0 :(得分:0)

C语言准确地说明了:

  
    

#include&#34; q-char-sequence&#34;新行

  
     

导致由&#34;之间指定序列标识的源文件的全部内容替换该指令。分隔符。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,则会重新处理该指令,就像它读取:

     
    

#include new-line

  

这明确表明通过&#34;&#34;将始终位于通过&lt;&gt;。

标识的位置之前。

因此,如果您明确使用&#34;&#34;甚至对于(你的)stdlib.h来说,编译器总会选择你自己的而不是系统的。