我知道 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 的文件,并且该文件将被包含而不是默认标头。
所以,我尝试了两种选择:
1)注释掉这一行// #include_next <stdio.h>
在所有文件中。
2)或将#include_next替换为#include <stdio.h>
.
我不知道选择 1) 是否会导致任何问题(最后出现链接器错误)。
关于2),我得到fatal error C1014: too many include files : depth = 1024
这也很好。为此,我会使用wrapper #ifndef
为了包括警卫 or # pragma once
指示。
以下是我的担忧:
我需要写这样的声明吗#include <stdio>
or #include "stdio.h"
在头文件stdio.h里面?为 Windows 编译时是否有意义?难道我只做就足够了#include "stdio.h"
直接在它需要的所有源文件中,这样它就会绕过 Visual C 标准头并使用我的?
而且,如果我完全省略 include_next 语句,可能/可能不会发生什么?
我的主要目标是使用 MSVC 成功编译 gnu 库。
如果我遗漏了什么,请纠正我,或者也许对这个主题有更多的了解。
选项 1 和 2 都不起作用。它是一个包装系统头的头。因此,如果您将其注释掉,系统标头将不会被包含在内,并且它的定义将会丢失。如果你把它改成普通的#include
,它将再次包含相同的标头,导致无限循环。
提升用途
#include <../include/stdio.h>
这适用于 WinNT,因为所有标准头都恰好位于名为include
。它也适用于标准 WinCE SDK,但不幸的是不适用于所有这些 SDK。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)