c++ - 如何包含名称中包含`>`的头文件?
问题描述
我承认,这是一个相当人为的问题,但就是这样。
假设您有一个>
名称中包含该字符的文件。这在大多数 Unix 系统上都是可能的afaik:
$ touch 'weird>name'
$ ls -l
-rw-r--r-- 1 user user 0 28 Mag 11:05 weird>name
现在,假设此文件包含 C/C++ 代码,并且您希望将其作为标头包含在内:
#include <weird>name>
int main() {
return weird_function();
}
Clang给我以下错误:
test.cpp:1:10: fatal error: 'weird' file not found
#include <weird>name>
当然,由于预处理器将指令解析到第一个>
并查找weird
文件。但是,我想知道是否存在一些转义机制来允许我包含正确的文件。
那么,在 C 和/或 C++ 中,有没有办法包含一个>
名称中包含该字符的头文件?
编辑:很多人建议我为什么不使用#include "weird>name"
. 我承认在编写问题时我的思绪滑过了引号语法,但它仍然有效,因为这两种语法可能会要求编译器在不同的路径中搜索(至少理论上是这样)。那么是否有任何转义机制让我包含weird>name
使用#include <>
语法?
解决方案
那么,在 C 和/或 C++ 中,有没有办法包含一个名称中包含 > 字符的头文件?
是的:
#include "weird>name"
那么是否有任何转义机制让我包含
weird>name
使用#include <>
语法?
<
不能。和之间的字符>
必须是“源字符集的任何成员,除了换行符和>
”([lex.header])。任何转义的形式编辑:允许实现在那里支持实现定义的转义序列(参见[lex.header] p2及其脚注)。>
仍然是表示>
字符的一种方式,这是不允许的。
#include " q-char-sequence "
表单确实允许字符出现>
,即使它可能会被重新处理,就#include <...>
好像搜索"..."
失败([cpp.include] p3)。
预处理器还允许另一种形式 ([cpp.include] p4]( http://eel.is/c++draft/cpp.include#4 )),但它的效果是实现定义的,我尝试过的实现不允许将weird
and加入>
到name
单个预处理器令牌中,然后可以将其包含在内
推荐阅读
- django - 如何使用 SQS 启动 Celery 容器
- android - 选择图像并将结果发送到android studio中的另一个活动保持强制关闭
- wordpress - 单个 URL 的 Worpress htaccess 重写规则
- mongodb - 如何使用猫鼬$near?(类型数据位置)
- postgresql - 码头工人 | Postgres 数据库未初始化且未指定超级用户密码
- python - 保存启用宏的电子表格时出现 pywin/win32com 文件访问错误
- java - Spring Security - REST API 的授权
- python - Python:如果使用正则表达式从另一个字符串中提取子字符串
- php - Wordpress+ACF - 通过转发器字段中的多选选项进行过滤
- search-engine - 将 TF-IDF 值存储在倒排索引中