include_next预处理器指令导致MSVC中的问题

我知道inlcude_next恰好是C预处理器的GNU扩展。 我正在面对使用MSVC编译Gnu库代码的问题。 例如,有一个stdio.h头文件,或者像GNU-like <stdio.h> 。 当使用MS编译器编译时,我得到invalid preprocessor command 'include_next' ,这很好,因为没有什么像Windows#include_next指令。 做#include_next的主要目的是为了在你的项目中创build一个名为stdio.h的文件,而不是默认的头文件。

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

我不知道如果select1)会导致任何问题(最后链接器错误)。 关于2),我得到了fatal error C1014: too many include files : depth = 1024这也很好。 为此,我将使用wrapper #ifndef作为include guard# pragma once指令。

以下是我的担忧:

我是否需要在头文件stdio.h中写入像#include <stdio>#include "stdio.h"的语句? 编译Windows时会有什么意义吗? 是不是只要在所需的所有源文件中直接执行#include "stdio.h" ,就可以绕过Visual C标准头文件而不是使用我的? 而且,如果我忽略整个语句include_next,可能会发生什么?

我的主要目标是成功地使用MSVC编译GNU库。 如果我错过了一些东西,请纠正我,或者在这个话题上多加点亮。

Solutions Collecting From Web of "include_next预处理器指令导致MSVC中的问题"

选项1和2都不能工作。 这是一个包裹系统的标题。 所以如果你注释掉了,系统头文件将不会被包含,定义将会丢失。 如果将其更改为普通的#include ,它将再次包含相同的头文件,导致无限循环。

提升用途

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

这在WinNT上是可行的,因为所有的标准头文件都是在名为include目录中的。 它也适用于标准的WinCE SDK,但不幸的是,它们并不适用于所有这些SDK。