4

我知道 inlcude_next 恰好是 C 预处理器的 GNU 扩展。我在使用 MSVC 编译 Gnu 库代码时遇到问题。例如,有一个 stdio.h 头文件或更确切地说是GNU-like <stdio.h>. 当使用 MS 编译器编译时,我得到invalid preprocessor command 'include_next'了很好的结果,因为没有什么#include_next比 windows 的指令更重要的了。执行 #include_next 的主要目的是您想在项目中创建一个名为 stdio.h 的文件,该文件将被包含在内,而不是默认标头。

// #include_next <stdio.h>所以,我尝试了 2 个选项:1)在所有文件中注释掉这一行。2) 或将 #include_next 替换为#include <stdio.h>.

我不知道选择 1) 是否会导致任何问题(最后出现链接器错误)。关于2),我得到了fatal error C1014: too many include files : depth = 1024也很好。为此,我将使用wrapper #ifndef包含警卫# pragma once指令。

以下是我的担忧:

我是否需要在头文件 stdio.h 之类#include <stdio>或内部编写语句?#include "stdio.h"为 Windows 编译时是否有意义。直接在它需要的所有源文件中进行操作是否就足够了#include "stdio.h",这样它就可以绕过 Visual C 标准头文件而使用我的头文件?而且,如果我完全省略语句 include_next,可能/可能不会发生什么?

我的主要目标是使用 MSVC 成功编译 gnu 库。如果我遗漏了什么或者可能对这个话题有更多的了解,请纠正我。

4

1 回答 1

4

选项 1 和 2 都不起作用。它是包装系统的标头。因此,如果您将其注释掉,系统标头将不会被包含在内,并且它的定义将丢失。如果将其更改为 plain #include,它将再次包含相同的标头,从而导致无限循环。

提升用途

#include <../include/stdio.h>

这适用于 WinNT,因为所有标准头文件都位于名为include. 它也适用于标准的 WinCE SDK,但不幸的是,它并不适用于所有这些 SDK。

于 2013-06-18T11:05:43.413 回答