【问题标题】:#include absolute path syntax in c/c++#include c/c++中的绝对路径语法
【发布时间】:2012-09-15 18:45:24
【问题描述】:

由于某种原因,我的系统需要使用#include 中的绝对路径。

是否可以使用#include "D:\temp\temp_lib\temp.h"

我已经尝试了这些不同的用法,并且似乎都有效。

  1. #include "D:\temp\temp_lib\temp.h"
  2. #include "D:\\temp\\temp_lib\\temp.h"
  3. #include "D:/temp/temp_lib/temp.h"

我只想知道我应该使用哪一个?我正在使用 MSVC 2005。我想知道这三个是否仍然可以在 Linux 或其他环境中工作。

我预计 #1 在编译期间会出现错误,但我没有得到任何错误。有人知道这是为什么吗?

【问题讨论】:

  • 我说你用你觉得最舒服的那个。不,none 将在 Linux(或 OSX)环境中工作,因为除了 Windows(和 DOS)之外没有其他系统具有驱动器号。最接近的是带有正斜杠的那个 (/)。
  • @JoachimPileborg 好点。 :) D:/
  • 最好确定——为什么需要绝对路径。我想如果您向我们解释这一点 - 我们会提出一个解决方案来帮助您避免这种情况。是的——它们都不能在 Linux 中工作。
  • @denys 一个很好的理由是在源代码控制之外有一个带有一些调试工具功能的调试头,我只包括调试会话,实际上并不提交。然而,我重复使用它们并希望能够尽快将它们放入和取出。绝对路径允许这样做。

标签: c++ c path include absolute


【解决方案1】:

我知道的每个实现,当然还有 MSVC 2005 和 linux,都允许您指定在其中查找头文件的目录路径。您应该在目录路径列表中包含 D:\temp\temp_lib,然后使用

#include <temp.h>

对于 gcc,使用 -I path。对于 MSVC,请参阅Where does Visual Studio look for C++ header files?

#1 不是语法错误的原因是,虽然它看起来像字符串文字,但它不是。规格是

#include "q-char-sequence"

q-char 在哪里

源字符集的任何成员,换行符除外 和“

特别是\ 没有特殊含义。 q-char-sequence 的解释是实现定义的。

【讨论】:

  • 这是很好的解释。但我尝试了这一行:#include "D:\temp\new\new_file.h" 并且 MSVC 仍然能够找到 new_file.h。我预计会出现错误,因为它包含换行符 (\n)。任何人都知道为什么 MSVC 能够找到该文件?我也没有在 MSVC 中设置 D:\temp\new 的 -I 路径。所以,我很困惑为什么 MSVC 仍然能够找到该文件。
  • @chrisyo \n 不是换行符...换行符是(在 ASCII 中)ctrl-j。 \n 是一个转义序列,C 编译器将其 解释为 为换行符 .... 但不是在这里;再次,“\没有特殊含义”。 '为什么 MSVC 仍然能够找到文件' - 因为你给了它一个绝对路径,所以它不需要在路径列表中查找它。我推荐使用路径列表的原因是因为你说你希望它在 Linux 中工作,但你的 Windows 路径不能在那里工作。
  • @Jim 谢谢你的解释。很有帮助。
猜你喜欢
  • 2023-03-03
  • 2013-04-26
  • 2017-04-10
  • 2011-06-15
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多