Cap*_*orn 6 c windows gnu visual-studio-2010
我知道 inlcude_next 恰好是 C 预处理器的 GNU 扩展。我在使用 MSVC 编译 Gnu 库代码时遇到问题。例如,有一个 stdio.h 头文件或者更确切地说GNU-like <stdio.h>. 当使用 MS 编译器编译时,我得到了invalid preprocessor command 'include_next'很好的结果,因为没有什么比#include_nextWindows 的指令更好的了。执行 #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 库。如果我遗漏了什么,请纠正我,或者也许对这个主题有更多的了解。
选项 1 和 2 都不起作用。它是一个包装系统头的头。因此,如果您将其注释掉,系统标头将不会被包含在内,并且它的定义将会丢失。如果将其更改为 plain #include,它将再次包含相同的标头,从而导致无限循环。
提升用途
#include <../include/stdio.h>
Run Code Online (Sandbox Code Playgroud)
这适用于 WinNT,因为所有标准头文件都位于名为include. 它也适用于标准 WinCE SDK,但不幸的是不适用于所有这些 SDK。