我知道 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 库。如果我遗漏了什么或者可能对这个话题有更多的了解,请纠正我。