include_next预处理程序指令导致MSVC出现问题

时间:2013-03-08 12:53:44

标签: c windows gnu visual-studio-2010

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

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

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

以下是我的担忧:

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

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

1 个答案:

答案 0 :(得分:3)

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

Boost使用

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

这适用于WinNT,因为所有标准标头恰好位于名为include的目录中。它也适用于标准的WinCE SDK,但遗憾的是它并不适用于所有这些。