gpt4 book ai didi

C++ 在#include 指令中使用 ..(点)是否合法?

转载 作者:太空狗 更新时间:2023-10-29 20:23:06 26 4
gpt4 key购买 nike

那里。正如标题所说。

使用#include"test.h"是合法的。
使用#include"test/test.h"也是合法的。
但是使用 #include"../test.h" 合法吗?

例如,#pragma once在几乎所有编译器中都是合法的。
但这在 C++ 中不是标准的。

我找不到任何文件说..“保证”是父目录的意思。
谁能帮帮我?

最佳答案

C++ 标准在 §2.8/1 中说:

Header name preprocessing tokens shall only appear within a #include preprocessing directive (16.2). The sequences in both forms of header-names are mapped in an implementation-defined manner to headers or to external source file names as specified in 16.2.

所以你知道了:它们都是实现定义的。 §16.2 然后说,除此之外,还有一些与您的问题没有直接关系的事情:

A preprocessing directive of the form

#include "q-char-sequence" new-line

causes the replacement of that directive by the entire contents of the source file identified by the specified sequence between the " delimiters. The named source file is searched for in an implementation-defined manner.

这很有意义。为什么不能为不使用“..”约定的文件系统创建 C++ 编译器?

总而言之,回答您的问题:是的,根据 C++ 标准,这是合法的,但这并不奇怪,因为对于 #include 指令而言,几乎所有内容在技术上都是合法的。

更有趣的问题是您的 C++ 实现的文档对此有何评论。但即便如此,您可能也会对这个主题留下一个相当笼统的解释。例如,MSVC 2015 documentation for #include说:

The path-spec is a file name that may optionally be preceded by a directory specification. The file name must name an existing file. The syntax of the path-spec depends on the operating system on which the program is compiled.

关于C++ 在#include 指令中使用 ..(点)是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34692366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com