我知道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库。 如果我错过了一些东西,请纠正我,或者在这个话题上多加点亮。
选项1和2都不能工作。 这是一个包裹系统的标题。 所以如果你注释掉了,系统头文件将不会被包含,定义将会丢失。 如果将其更改为普通的#include
,它将再次包含相同的头文件,导致无限循环。
提升用途
#include <../include/stdio.h>
这在WinNT上是可行的,因为所有的标准头文件都是在名为include
目录中的。 它也适用于标准的WinCE SDK,但不幸的是,它们并不适用于所有这些SDK。