我希望以跨平台和交叉编译的方式阻止在整个代码中使用标准库。
我想到的技巧是创建虚拟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__ */
但这个解决方案存在两个问题:
我不确定编译器给予-I directoires比glibc include path更高的优先级
包含stdlib.h的行将导致循环 - 我需要一种方法来包含真正的stdlib.h并且不会导致编译器重新包含我的模拟头文件。
答案 0 :(得分:0)
C语言准确地说明了:
#include&#34; q-char-sequence&#34;新行
导致由&#34;之间指定序列标识的源文件的全部内容替换该指令。分隔符。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,则会重新处理该指令,就像它读取:
#include new-line
这明确表明通过&#34;&#34;将始终位于通过&lt;&gt;。
标识的位置之前。因此,如果您明确使用&#34;&#34;甚至对于(你的)stdlib.h来说,编译器总会选择你自己的而不是系统的。