假设我有一个名为a"b.h或a>b.h的头文件,如何在include指令中转义"或>字符?
a"b.h
a>b.h
"
>
// this does not work #include "a\"b.h"
yzuktlbb1#
当使用#include <filename>指令时,>字符不允许作为文件名的一部分(分别地,"不允许作为#include "filename"中文件名的一部分)。没有标准的方法来转义序列中的任何字符,任何这样的功能都是编译器扩展。cppreference link。对于文件名a>b.h的特定情况,您可以将其更改为#include "a>b.h",它应该可以工作。Film a"b.h就不走运了--即使在#include <a"b.h>中,它也是实现定义的如何处理"字符(或者如果支持的话)。除了"之外,在#include指令的文件名部分使用字符'、\、//或/*也是实现定义的,可能不受支持。
#include <filename>
#include "filename"
#include "a>b.h"
#include <a"b.h>
#include
'
\
//
/*
xeufq47z2#
深入挖掘C语法,这种语法在C17 6.4.7中定义。#include后面可能出现的两个有效语法项是:用户名:*<h-char-sequence>"q-char-sequence"它们分别由 h-char 和 q-char 项组成。然后,标准明确禁止包含字符串中的>和"字符:
<
源字符集中除换行符和>以外的任何成员q-char:源字符集中除换行符和"以外的任何成员这是任何C编译器都必须遵循的可移植行为。但是,您可以在#include "header.h"中使用>。
#include "header.h"
4bbkushb3#
允许的字符在lex.charset中定义。你可以使用这些字符中的任何一个,只要它们不破坏解析:lex.header。在这种情况下,您可能需要添加包含路径并尝试以下操作:
3条答案
按热度按时间yzuktlbb1#
当使用
#include <filename>
指令时,>
字符不允许作为文件名的一部分(分别地,"
不允许作为#include "filename"
中文件名的一部分)。没有标准的方法来转义序列中的任何字符,任何这样的功能都是编译器扩展。cppreference link。对于文件名
a>b.h
的特定情况,您可以将其更改为#include "a>b.h"
,它应该可以工作。Film
a"b.h
就不走运了--即使在#include <a"b.h>
中,它也是实现定义的如何处理"
字符(或者如果支持的话)。除了
"
之外,在#include
指令的文件名部分使用字符'
、\
、//
或/*
也是实现定义的,可能不受支持。xeufq47z2#
深入挖掘C语法,这种语法在C17 6.4.7中定义。
#include
后面可能出现的两个有效语法项是:用户名:*
<
h-char-sequence>
"
q-char-sequence"
它们分别由 h-char 和 q-char 项组成。然后,标准明确禁止包含字符串中的
>
和"
字符:源字符集中除换行符和
>
以外的任何成员q-char:
源字符集中除换行符和
"
以外的任何成员这是任何C编译器都必须遵循的可移植行为。
但是,您可以在
#include "header.h"
中使用>
。4bbkushb3#
允许的字符在lex.charset中定义。你可以使用这些字符中的任何一个,只要它们不破坏解析:lex.header。
在这种情况下,您可能需要添加包含路径并尝试以下操作: