【发布时间】:2013-03-08 12:53:44
【问题描述】:
我知道 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 的文件,该文件将被包含在内,而不是默认标题。
所以,我尝试了 2 个选项:
1)在所有文件中注释掉这一行// #include_next <stdio.h>。
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 库。 如果我遗漏了什么或者可能对这个主题有更多的了解,请纠正我。
【问题讨论】:
-
“我的目标是使用 MSVC 成功编译 gnu 库” - 请参阅 gnuwin32.sourceforge.net
-
@roger_rowland 我的意思是我拥有的代码有 include_next。它们不是精确的 gnu 库。我可以从上面的链接中使用。但应用需求不同
标签: c windows gnu visual-studio-2010