头文件名中的斜杠是什么意思?

时间:2014-04-03 23:55:59

标签: c linux header-files

我正在阅读gcc gnu-online-docs。我对它在头文件名中提到\/的内容感到困惑。

它说:

  

但是,如果文件中出现反斜杠,则会考虑它们   普通文本字符,不是转义字符。没有人物   处理适合于C中的字符串常量的转义序列。   因此,#include "x\n\\y"指定包含三个的文件名   反斜杠。 (有些系统将'\'解释为路径名分隔符。全部   其中也以同样的方式解释'/'。它最易于使用   只有'/'。)

本段中的“某些系统”是什么意思?这是否意味着实施取决于操作系统--Windows / Linux? (我知道#include <linux/module.h>/指定路径)

2 个答案:

答案 0 :(得分:4)

在Windows上, / \ 都用作路径名组件分隔符(将目录名称与其中某个内容的名称分开)目录)。在当今常用的所有其他操作系统上,只有 / 才能提供此功能。 1

通过在头文件名中取 \ ,而不是普通字符串中的转义字符,GCC的预处理器适用于使用反斜杠编写的Windows特定代码,例如

#include <sys\types.h>

程序员非常不可能包含名称为&#39; sys ypes.h&#39;的文件。 (在&#39; y&#39;是硬标签之前空白)。本手册中的文本旨在通知您,如果移动到Unixy系统,此类代码将无效,但如果您使用正斜杠编写它,则在Windows上运行。

我碰巧写了你引用的段落,但那已经十多年了,而且我不记得为什么我没有使用&#34; Windows&#34;这个词。

1 VMS和一些IBM大型机操作系统具有完全不同的路径名语法,但这些从未得到GCC的良好支持,我的理解是,幸存的安装往往安装了POSIX兼容层反正。

答案 1 :(得分:1)

请注意,在普通字符串中,\n是换行符,\t是标签,\a是警报等。

文字意味着如果你写:

#include <sys\alert.h>

\a序列被视为两个字符,反斜杠和'a',而不是单个字符'alert'。也就是说,该文件名为alert.h,位于编译器搜索标头的某个目录中的某个目录sys中。通常,在字符串中,"sys\alert.h"表示名称'','y','s',退格,'l','e','r','t ','。','h'。

同样适用于:

#include <sys\backtrack.h>
#include <sys\file.h>
#include <sys\newton.h>
#include <sys\register.h>
#include <sys\time.h>
#include <sys\vtable.h>

(我把名字看作是方便的,sys可以被任何其他目录名替换,而<>可以被""替换。

#include <sys\386.h>
#include <sys\xdead.h>
#include <sys\ucafe.h>
#include <sys\U00DEFACED.h>

也被视为常规字符串,而不是包含八进制,十六进制或Unicode转义。

Windows是使用\作为正式路径元素分隔符的主系统。但是,即使在Windows上,API也会将/视为\