3

就我而言,我有两层,即核心层和应用层。应用层依赖于核心层。

我希望只有核心层应该使用 CRT 功能。

在应用层,如果使用了任何 CRT 函数,它不应该编译。

有什么办法可以做到这一点?例如,不应该在应用层直接调用free/malloc。

我认为#define所有CRT函数出现错误的一种方法是应用程序层不能使用直接CRT调用(应用程序层包括核心层的头文件)。

4

2 回答 2

1

你不需要#define CRT 中的所有函数。定义头文件中声明的函数之一就足以导致编译失败。

此外,查看 CRT 标头,它们中的大多数都依赖于这种结构:

    #ifndef "some unique id"
    #define "some unique id"
    /* header body */
    #endif

如果你定义了这个唯一的id,你将有效地导致不包含头文件,因此在尝试使用在这个头文件中声明的函数时会发生编译错误。

于 2012-11-09T12:52:11.453 回答
1

假设您的所有项目都是本机 C 或 C++,我相信删除对 Windows CRT 二进制文件的引用就足够了。如果有人尝试使用它们,他们将收到链接错误。

对于 dll,打开项目属性(从 Visual Studio),然后转到Configuration Properties->Linker->Input并设置Ignore All Default LibrariesYes (/NODEFAULTLIB). 在那个之上,设置Additional Dependencies为您需要的解决方案中的库。

对于静态库,请转到Librarian->General并执行相同操作。

于 2012-11-09T12:57:03.333 回答