如何在include指令中转义字符?

du7egjpx  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(121)

假设我有一个名为a"b.ha>b.h的头文件,如何在include指令中转义">字符?

// this does not work
#include "a\"b.h"
yzuktlbb

yzuktlbb1#

当使用#include <filename>指令时,>字符不允许作为文件名的一部分(分别地,"不允许作为#include "filename"中文件名的一部分)。没有标准的方法来转义序列中的任何字符,任何这样的功能都是编译器扩展。cppreference link
对于文件名a>b.h的特定情况,您可以将其更改为#include "a>b.h",它应该可以工作。
Film a"b.h就不走运了--即使在#include <a"b.h>中,它也是实现定义的如何处理"字符(或者如果支持的话)。
除了"之外,在#include指令的文件名部分使用字符'\///*也是实现定义的,可能不受支持。

xeufq47z

xeufq47z2#

深入挖掘C语法,这种语法在C17 6.4.7中定义。#include后面可能出现的两个有效语法项是:
用户名:*
<h-char-sequence>
"q-char-sequence"
它们分别由 h-charq-char 项组成。然后,标准明确禁止包含字符串中的>"字符:

  • h-char:*

源字符集中除换行符和>以外的任何成员
q-char:
源字符集中除换行符和"以外的任何成员
这是任何C编译器都必须遵循的可移植行为。
但是,您可以在#include "header.h"中使用>

4bbkushb

4bbkushb3#

允许的字符在lex.charset中定义。你可以使用这些字符中的任何一个,只要它们不破坏解析:lex.header
在这种情况下,您可能需要添加包含路径并尝试以下操作:

#include "a>b.h"

相关问题