#include“〜/ file_name”无法编译

时间:2017-11-10 00:02:28

标签: c

我有两个程序:

#include "file1"

int main(void)
{
    return (1);
}

其中file1只是一个与程序位于同一目录中的空文件。

然后我有:

#include "~/file2"

int main(void)
{
    return (1);
}

其中file2是一个空文件,但这次是在我的主目录中。

第一个程序编译,第二个程序抱怨并说file not found

有人能解释一下这里发生了什么吗?

1 个答案:

答案 0 :(得分:3)

指令如:

#include "file.h"

搜索名称为file.h的文件。示例中的字符串~/file2实际上不是文件的名称。 ~由shell 扩展到主目录的路径;实际的文件名类似于/home/username/file2

字符串到文件的映射可能很复杂,并且可能因系统而异,但通常会有大量的语法被shell识别并且转换到文件名,但这本身并不构成文件名。像$HOME这样的变量名称是相似的;您无法在$HOME指令中使用#include

实际上

#include "~/file2"

可能有效 - 如果您的目录名称字面为~,其中包含名称为file2的文件。这将是合法的但令人困惑。

您可以使用

#include "/home/username/file2"

但是这会将源绑定到您的特定主目录,并且会让其他人难以使用ut。

通常,要包含的文件的名称应以.h结尾,其位置应相对于包含源文件的目录,或者位于编译器搜索的多个位置之一。