在我的案例中,我有两个层次,核心层和应用层。应用层依赖于核心层。
我希望只有核心层使用CRT函数。
在应用层中,如果使用任何CRT函数,它不应该编译。
有没有办法实现这一点?例如,在应用层中不能直接调用 free/malloc 。
我想到的一种方法是将所有CRT函数 #define为某个错误,这样应用层就不能使用直接的CRT调用(应用层包括核心层的头文件)。
在我的案例中,我有两个层次,核心层和应用层。应用层依赖于核心层。
我希望只有核心层使用CRT函数。
在应用层中,如果使用任何CRT函数,它不应该编译。
有没有办法实现这一点?例如,在应用层中不能直接调用 free/malloc 。
我想到的一种方法是将所有CRT函数 #define为某个错误,这样应用层就不能使用直接的CRT调用(应用层包括核心层的头文件)。
你不需要在CRT中定义所有的函数。只需定义头文件中声明的一个函数即可导致编译失败。
此外,请查看CRT头文件,它们大多依赖于某种类似的结构:
#ifndef "some unique id"
#define "some unique id"
/* header body */
#endif
假设您的所有项目都是本地C或C ++,我相信删除对Windows CRT二进制文件的引用就足够了。如果有人尝试使用它们,他们将会得到链接错误。
对于dll,打开项目属性(从Visual Studio),然后转到配置属性->链接器->输入
,并将忽略所有默认库
设置为是(/NODEFAULTLIB)
。在上面的位置,将附加依赖项
设置为您需要的解决方案中的库。
对于静态库,请转到库管理员->常规
并执行相同操作。